我正在写一个bash脚本,用来扫描HDFS,并对输出结果进行处理。
获取文件名很容易,如下所示。
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
我怎么才能做到这一点?
问题出在for循环中。当你做 for line in $(hdfs dfs -ls -t -r -C -R $HDFS_CLEANING_STG);
,它在每个字上迭代,而不是在每一行上迭代。所以,每当它面对一个空白处时,它的 line
随着你刚才读的字而改变。
一个简单的解决方法就是这样做。
for line in "$(hdfs dfs -ls -t -r -C -R $HDFS_CLEANING_STG)"; do
echo "$line"
done
或者像这样:
hdfs dfs -ls -t -r -C -R $HDFS_CLEANING_STG | while read line; do
echo "$line"
done