我有大约60MB的每个部分8000个GZ文件。 我想将它们合并到几个较大的文件。 因此,如何做一个bash脚本没有解压呢 ?
shell脚本可能需要输入新的文件大小或文件相结合的数量。
例如说我有1.gz,2.gz,3.gz ... 10.gz现在我需要一个文件,每说3个文件,所以现在1.gz,2.gz和3.gz会结合成1_new。 GZ等。
我有大约60MB的每个部分8000个GZ文件。 我想将它们合并到几个较大的文件。 因此,如何做一个bash脚本没有解压呢 ?
shell脚本可能需要输入新的文件大小或文件相结合的数量。
例如说我有1.gz,2.gz,3.gz ... 10.gz现在我需要一个文件,每说3个文件,所以现在1.gz,2.gz和3.gz会结合成1_new。 GZ等。
它可以concatinate gzip
ED文件一起,但是当你gunzip
生成的文件,你会得到一个单一的数据流,看到的gzip手册以供参考。
脚本将类似于安斯加尔Wiechers的一个tar
:
#!/bin/bash
maxnum=$1
i=1
j=0
for f in *.gz; do
cat $f >> archive_$j.gz
i=$((i+1))
if [ $i -eq $maxnum ]; then
i=1
j=$((j+1))
fi
done
需要注意的是,上面的代码是未经测试。
如果要存档的东西正确 tar
是一个更好的解决方案,但如果你想要做的是concatinate许多文件已gzip
ED那么这样的concatination,因为这是很好的。
gzip
只能压缩单个文件。 你需要tar
将多个文件合并成一个单一的档案,这在随后(可选)与压缩gzip
。 如果你只是要合并的压缩文件,可以使用这样的事情:
maxnum=$1
i=1
j=0
for f in *.gz; do
tar rf archive_$j.tar $f
if [ $i -eq $maxnum ]; then
i=1
j=$((j+1))
fi
done
这将产生含有的压缩源文件未压缩tar文件。
如果要产生含有未压缩的源文件压缩的tar文件,上面将无法正常工作,但是,因为你无法更新压缩tar文件。 你需要先解压缩源文件,然后创建它们压缩tar文件:
maxnum=$1
i=1
j=0
flist=
for f in *.gz; do
gunzip $f
flist="$flist $(basename $f .gz)"
if [ $i -eq $maxnum ]; then
tar czf archive_$j.tar.gz --remove-files $flist
i=1
j=$((j+1))
flist=
fi
done