多个GZip文件的快速连接

时间:2011-11-04 05:10:27

标签: linux unix gzip compression

我有gzip文件列表:

file1.gz
file2.gz
file3.gz

有没有办法将这些文件连接或压缩到一个gzip文件中 无需解压缩吗?

在实践中,我们将在Web数据库(CGI)中使用它。网络将收到的地方 来自用户的查询,并根据查询列出所有文件并显示它们 在批处理文件中返回给用户。

4 个答案:

答案 0 :(得分:84)

使用gzip文件,您可以简单地将文件连接在一起。根据{{​​3}},

  

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

请注意,这与构建连接数据的单个gzip文件不完全相同;除其他外,保留所有原始文件名。然而,gunzip似乎把它当作串联来处理它。

由于现有工具通常忽略其他成员的文件头,因此不容易从结果中提取单个文件。如果您希望这样做,请改为构建ZIP文件。 ZIP和GZIP都使用DEFLATE算法进行实际压缩(ZIP支持一些其他压缩算法以及一个选项 - 方法8是与GZIP压缩相对应的方法);不同之处在于元数据格式。由于元数据是未压缩的,因此它很容易剥离gzip标头并改为使用ZIP文件头和中央目录记录。请参阅gzip RFCgzip format specification

答案 1 :(得分:46)

以下man 1 gzip说明了您的要求。

  

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

gzip -c file1  > foo.gz
gzip -c file2 >> foo.gz
     

然后

gunzip -c foo
     

相当于

cat file1 file2

毋庸置疑,file1可以替换为file1.gz

你必须注意到这一点:

  

gunzip将立即提取所有成员

因此,为了让所有成员单独参与,如果你愿意,你将不得不使用额外的东西或写作。

但是,这也可以在手册页中找到。

  

如果您希望创建一个包含多个成员的归档文件,以便以后可以独立提取成员,请使用tar或zip等归档文件。 GNU tar支持-z选项以透明地调用gzip。 gzip被设计为tar的补充,而不是替代品。

答案 2 :(得分:11)

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

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

答案 3 :(得分:10)

只需使用猫。速度非常快(对于500 MB,我只需0.2秒)

cat *gz > final
mv final final.gz

然后,您可以使用zcat读取输出以确保它非常漂亮:

zcat final.gz

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

<强> PV:

更好的是,如果你拥有它,&#39; pv&#39;而不是猫:

pv *gz > final
mv final final.gz

这会为您提供一个进度条,但它与cat相同。