我正在编写一个bash脚本来扫描hdf并处理输出。
通过以下操作可以轻松获取文件名:
for line in $(hdfs dfs -ls -t -r -C -R $HDFS_CLEANING_STG); do
echo $line
done
输出:
/dir
/dir/file1
/dir/file2
但是,它会删除文件大小、日期、权限等。
使用相同的方法但不使用 -C
标志,它提供元数据,但不是仅在一行上:
输出示例:
-rw-rw-r--+
3
hdfs
hdfs
34448169
2020-05-04
11:36
/dir/file
我想得到这些信息,但是有了这个输出(就像“正常的” ls
):
-rw-rw-r--+ 3 hdfs hdfs 34448169 2020-05-04 11:36 /dir/file
我怎样才能做到这一点?
1条答案
按热度按时间pw9qyyiw1#
问题在for循环中。当你这么做的时候
for line in $(hdfs dfs -ls -t -r -C -R $HDFS_CLEANING_STG);
,它迭代每个单词,而不是每行。所以,每当它面对一个空白时line
随你刚读到的单词而变化。一个简单的解决方法是这样做:
或者像这样: