Ubuntu终端合并分割.tar.gz文件时命令出错求解决方案
合并同一文件夹内的分割.tar.gz文件
我来帮你搞定这个合并分割压缩包的问题!你的需求是把同前缀的分割文件(比如file1.tar.gz_aa/file1.tar.gz_ab、file2.tar.gz_aa/file2.tar.gz_ab)分别合并成完整的file1.tar.gz和file2.tar.gz对吧?之前的命令要么逻辑不对,要么语法出错,我给你梳理下正确的方法:
问题分析
你之前的第一个命令把所有文件合并到同一个文件,是因为${i%/}*的匹配范围太广,没有按前缀分组;第二个嵌套循环不仅语法有问题(for y in ${i}.gz_*后面缺了分号或者换行的do),逻辑上也没必要嵌套——我们只需要先拿到所有唯一的原始文件名前缀,再对每个前缀合并对应的分割文件就行。
正确的命令
直接运行下面的bash命令就能按前缀分组合并:
for prefix in $(ls *.gz_* | sed 's/_[a-z][a-z]$//' | sort -u); do cat "${prefix}_"* > "${prefix}" done
命令解释
ls *.gz_*:列出所有分割后的文件(匹配xxx.gz_aa这类格式)sed 's/_[a-z][a-z]$//':去掉文件名末尾的_aa/_ab后缀,得到原始文件名前缀(比如file1.tar.gz)sort -u:去重,确保每个前缀只出现一次- 循环里的
cat "${prefix}_"*:按顺序拼接当前前缀下的所有分割文件(file1.tar.gz_aa、file1.tar.gz_ab...),然后输出到原始文件名${prefix}(也就是file1.tar.gz)
验证合并结果
合并完成后,可以用下面的命令检查压缩包是否正常:
tar -tzf file1.tar.gz
如果能正常列出压缩包内的文件,说明合并成功啦。
内容的提问来源于stack exchange,提问作者Adrian Skar
相关产品推荐
相关产品推荐

