bash - 如何使用 bash 在 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
我想获取这些信息,但使用此输出(如“正常” 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
推荐阅读
- pytorch - 添加到权重矩阵 Pytorch
- php - 如何使用 socket.io 与后端 php websocket 反应本机客户端?
- c - 我认为下面的程序应该至少运行一次,因为条件为真,或者我弄错了。请赐教
- python - 将系列转换为 numpy 数组并将其与不同维度的数组连接起来
- 3d - Monogame + HLSL 鱼眼顶点着色器
- jenkins - 从 Jenkins 多分支管道中的初始克隆中读取
- python - Python matplotlib 格式
- javascript - 反应下拉不会在固定 div 中打开选项
- r - R在多汇总函数中,分位数未正确显示结果
- git - 将提交从一个分支移动到另一个分支作为更改的步骤