如何使用bash在HDFS中一行列出包含元数据的文件?
我正在编写一个bash脚本,它扫描hdf并处理输出 通过以下操作可以轻松获取文件名:如何使用bash在HDFS中一行列出包含元数据的文件?,bash,hadoop,hdfs,Bash,Hadoop,Hdfs,我正在编写一个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
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
):
如何实现这一点?问题在for循环中。当您对$中的行执行
时(hdfs dfs-ls-t-r-C-r$hdfs\u CLEANING\u 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
或者像这样:
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
问题在for循环中。当您对$中的行执行时(hdfs dfs-ls-t-r-C-r$hdfs\u CLEANING\u 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
或者像这样:
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
你在for循环中做什么?如何打印?@FrancescoLucianò我只是“呼应”了$line变量。问题更新。在for循环中你做什么?如何打印?@FrancescoLucianò我只是“呼应”了$line变量。问题更新了,就这样!但是没有-C标志。@Francesco Lucianò,+1,因为好的接球。就这样!但是没有-C标志。@Francesco Lucianò,+1,因为有好的接球机会。