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