终端/ bash:加入几个.gz spplited文件

时间:2018-04-14 11:58:35

标签: linux join terminal cat gz

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

  • file1.tar.gz_aa
  • file1.tar.gz_ab
  • file2.tar.gz_aa
  • file2.tar.gz_ab

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

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

我尝试过“嵌套”循环:

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

但是我在意外的令牌“>”

附近出现语法错误

编辑:我正在使用Xubuntu(不确定是否重要)我的目标是以原始状态(file1.tar.gz和file2.tar.gz)连接文件。 我也试图使用${name%.tar.gz*}将文件名放到一个数组中,但我是新手,我不知道如何删除重复项,然后“cat”它们(排序-u没有工作)

2 个答案:

答案 0 :(得分:0)

试试这个..

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

答案 1 :(得分:0)

Yayy,我终于明白了!! 我很有信心,希望有更多知识的人可以简化这个,但它目前正在做我想要的,

第一:将文件名分配给没有扩展名的数组

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

第二:摆脱重复(来自其他question

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

第3次:加入各自的原始状态

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