如何在HDFS中用bash将带有元数据的文件列在一行?

问题描述 投票:0回答:1

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

我怎么才能做到这一点?

bash hadoop hdfs
1个回答
2
投票

问题出在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
© www.soinside.com 2019 - 2024. All rights reserved.