14

假设有 a.gz 和 b.gz。

$ gzip_merge a.gz b.gz -输出 c.gz

我想要这个程序。当然,

$ cat a.gz b.gz > c.gz

不起作用。因为a.gz的最终DEFLATE块有BFINAL,b.gz的GZIP头。(参考 RFC1951, RFC1952) 但是如果你取消了 BFINAL,丢掉第二个 GZIP 头并且遍历第二个 gzip 文件的字节边界,你可以合并它。

其实我也想过为这件事写一个开源程序,但是不知道怎么发布。所以我请乔尔做我的项目经理,我给他讲解了我的解释和辩护,他终于明白了我想做什么,但说他太忙了。:(

当然,我可以自己写一个,然后尝试以我的方式发布它。但我不能一个人做这件事,因为我的日常工作属于我雇主的财产。

有志愿者吗?我们可以作为程序员(我)、出版商(你)或程序员(你)、出版商(我)工作。我需要的只是一些信用。我曾经实现过 RFC3320 中描述的通用解压器虚拟机。所以我知道这是可行的。

或者,您可以将我指向那个程序。这对于管理日志文件非常有用,例如将 365(天)gzip 压缩日志文件合并为一个。;)

谢谢。

4

2 回答 2

34

当然, cat a.gz b.gz > c.gz 不起作用。

实际上,它工作得很好。我刚刚测试了它。它甚至在 gzip 手册页中记录(有点)。

   Multiple  compressed  files  can  be concatenated. In this case, gunzip
   will extract all members at once. For example:

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

   Then

         gunzip -c foo

   is equivalent to

         cat file1 file2
于 2008-11-08T01:44:58.543 回答
6

您还可以:

zcat a.gz b.gz > c.txt && gzip c.txt

只要你的 Linux/Unix 发行版内置了 zcat,它们中的大多数都这样做(你可以为那些没有的发行版安装它。)

或者:

zcat a.gz b.gz | gzip -c > c.txt.gz
于 2012-07-12T21:52:48.423 回答