多个GZip文件的快速连接

我有gzip文件列表:

file1.gz file2.gz file3.gz 

有没有办法连接或gzip这些文件到一个gzip文件, 而不必解压缩它们?

在实践中,我们将在一个networking数据库(CGI)中使用它。 Web将收到来自用户的查询,并根据查询列出所有文件,并将其以batch file的forms呈现给用户。

使用gzip文件,您可以简单地连接文件。 根据gzip RFC ,

gzip文件由一系列“成员”(压缩数据集)组成。 […]成员只是在文件中一个接一个地出现,没有额外的信息之前,之间或之后。

请注意,这与构build连接数据的单个gzip文件不完全相同; 除此之外,所有的原始文件名都被保存下来。 但是,gunzip似乎将其视为相当于一个级联。

由于现有工具通常忽略其他成员的文件名标题,因此从结果中提取单个文件是不容易的。 如果你想这是可能的,build立一个ZIP文件。 ZIP和GZIP都使用DEFLATEalgorithm来进行实际的压缩(ZIP支持一些其他压缩algorithm以及一个选项 – 方法8是对应于GZIP压缩的方法)。 区别在于元数据格式。 由于元数据是未压缩的,所以很简单,就可以去掉gzip头文件,并使用ZIP文件头和中央目录logging。 请参阅gzip格式规范和ZIP格式规范 。

这里是gzip的man页面所说的关于你的需求。

多个压缩文件可以连接在一起。 在这种情况下,gunzip将立即提取所有成员。 例如:

  gzip -c file1 > foo.gz gzip -c file2 >> foo.gz Then gunzip -c foo is equivalent to cat file1 file2 

不用说,file1可以被file1.gzreplace

你必须注意到这一点。 “gunzip将立即提取所有成员”。

所以为了让所有的成员个人,你将不得不使用额外的东西或写,如果你想这样做:)

但是,这也在手册页中解决。

“如果你想创build一个带有多个成员的归档文件,以便以后可以独立提取成员,可以使用诸如tar或zip之类的归档程序。GNU tar支持-z选项来透明地调用gzip。gzip被devise为焦油,不能作为替代品“。

HTH

您可以创build这些文件的tar文件,然后gzip tar文件来创build新的gzip文件

 tar -cvf newcombined.tar file1.gz file2.gz file3.gz gzip newcombined.tar 

只要使用猫。 它非常快(500 MB的0.2秒)

 cat *gz > final mv final final.gz 

然后你可以用zcat读取输出,以确保它是相当的:

 zcat final.gz 

我尝试了'gz -c'的另一个答案,但是当使用已经压缩的文件作为input时,我最终得到了垃圾(我想它是双重压缩它们的)。

PV:

更好的是,如果你有它,而不是猫:

 pv *gz > final mv final final.gz 

这会给你一个进度条,但是和猫一样。