Terminal/bash: 加入几个.gz 分割文件

Terminal/bash: Join several .gz spplited files

我对终端不太熟悉,但我正在尝试加入几个拆分的 .tar.gz 文件,例如

在同一个文件夹中,但我只能使用以下方法将它们全部放在同一个文件中:

for i in *.gz_; do cat ${i%/}* > "${i%/}".joined; done

我试过 "nesting" 循环:

for i in *.gz_;do for y in ${i}.gz_* do cat ${i}.gz_${y} > ${i}.joined; done; done

但我在意外标记 `>' 附近收到语法错误

编辑:我正在为此使用 Xubuntu(不确定它是否重要),我的 objective 是加入原始状态的文件(file1.tar.gz 和文件 2.tar.gz)。 我也在尝试使用 ${name%.tar.gz*} 将文件名放入数组中,但我对此很陌生,我还不知道如何删除重复项然后 "cat" 它们(排序 -u 没有'工作)

试试这个..

zcat file1.tar.gz_aa file1.tar.gz_ab file2.tar.gz_aa file2.tar.gz_ab | gzip -c > joined.gz

耶耶,我终于明白了!! 我确信并希望有更多知识的人可以简化这个,但它目前做的是我想要的,

1st:将文件名分配给不带扩展名的数组

for name in *.gz_*; do arrname+=(${name%.tar.gz*}); done 

2nd:去除重复项(来自另一个question

uniq=($(echo "${arrname[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))

3rd: 加入各自的原始状态

for i in ${uniq[@]}; do cat $i.tar.gz_** > $i.joined.tar.gz; done

一下子: for name in *.gz_*; do arrname+=(${name%.tar.gz*}); done && uniq=($(echo "${arrname[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) && for i in ${uniq[@]}; do cat $i.tar.gz_** > $i.joined.tar.gz; done