bash - 如何使用bash在HDFS中的一行上列出带有元数据的文件?

标签 bash hadoop hdfs

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

我想获取这些信息,但是具有以下输出(例如“normal” 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

关于bash - 如何使用bash在HDFS中的一行上列出带有元数据的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61799114/

相关文章:

c - 将输入发送到 C 程序并打印它们

bash - 如何将已生成的 SSH key 添加到 git bash?

java - 想上传一个文件到一个文件夹,获取上传的文件名

linux - Bash 脚本不会将输入重定向到子进程

用于快速创建和填充新测试文件的 BASH shell 脚本

hadoop - 如何将reduce分区放入hadoop集群中设计的机器中?

hadoop - 无法启动cygwin sshd服务

hive - impala/hive 显示文件格式

hadoop - 根据 hdfs 中的模式列出文件名

hadoop - 在多节点hadoop集群上的哪里安装Java?