如何使用 bash 在 HDFS 的一行中列出带有元数据的文件?
How to list files with metadata on one line in HDFS with bash?
我正在编写一个 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);
时,它会遍历每个单词,而不是遍历每一行。所以,每次它面对一个白色的space,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 脚本来扫描 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);
时,它会遍历每个单词,而不是遍历每一行。所以,每次它面对一个白色的space,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