Terminal/bash: 加入几个.gz 分割文件
Terminal/bash: Join several .gz spplited files
我对终端不太熟悉,但我正在尝试加入几个拆分的 .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
我试过 "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
我对终端不太熟悉,但我正在尝试加入几个拆分的 .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
我试过 "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