我对终端不太熟悉,但我正在尝试加入几个分割的.tar.gz文件,比如
在同一个文件夹中,但我只能设法使用以下方法将它们全部放在同一个文件中:
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没有工作)
答案 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