Shell脚本:加入小gzip压缩文件到更大的文件解压缩没有他们[关闭](Shell Script

2019-10-17 08:45发布

我有大约60MB的每个部分8000个GZ文件。 我想将它们合并到几个较大的文件。 因此,如何做一个bash脚本没有解压呢

shell脚本可能需要输入新的文件大小或文件相结合的数量。

例如说我有1.gz,2.gz,3.gz ... 10.gz现在我需要一个文件,每说3个文件,所以现在1.gz,2.gz和3.gz会结合成1_new。 GZ等。

Answer 1:

它可以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,因为这是很好的。



Answer 2:

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


文章来源: Shell Script : Join small gzipped files into larger files without unzipping them [closed]
标签: bash shell