如何用bash在hdfs中一行列出包含元数据的文件?

u5rb5r59  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(345)

我正在编写一个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

我怎样才能做到这一点?

pw9qyyiw

pw9qyyiw1#

问题在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

相关问题