You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HDFS命令行批量解压目录文件并单独移动到目标文件夹

问题原因

你原命令中hdfs dfs -cat会将源目录下所有文件的内容拼接为单个标准流,管道传给hadoop fs -put -时,程序会将整段标准流写入为单个无分隔的文件,因此最终只会得到合并后的结果,不符合单个解压存储的需求。

单行实现方案

直接使用Shell循环配合HDFS原生命令即可实现,无需引入其他编程语言:

for f in `hdfs dfs -ls /user/[somedir1]/* | grep -v '^Found' | grep -v '^d' | awk '{print $NF}'`; do fn=$(basename $f); hdfs dfs -cat $f | hdfs dfs -put - /user/[somedir2]/uncompressed/$fn; done

注:HDFS的cat指令自带对gzip、bzip2、snappy等Hadoop原生支持压缩格式的自动解压能力,无需额外加装解压工具。

可选调整项

  • 如果你需要去掉压缩文件后缀,比如源文件为xxx.gz,解压后存为xxx,可以将fn=$(basename $f)修改为fn=$(basename $f .gz),后缀名匹配你实际使用的压缩格式即可。
  • 若源目录下还嵌套有子目录,可以将hdfs dfs -ls替换为hdfs dfs -ls -R递归遍历所有层级的文件。

内容的提问来源于stack exchange,提问作者user2552108

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:24:09