是否存在合并两个GZIP文件但未解压缩的GZIP合并?

时间:2008-11-08 01:37:07

标签: merge gzip deflate

假设有a.gz和b.gz。

$ gzip_merge a.gz b.gz -output c.gz

我想要这个节目。当然,

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

不起作用。因为a.gz的最终DEFLATE块具有BFINAL,而b.gz的GZIP头部。 (请参阅RFC1951,RFC1952)但是如果你取消设置BFINAL,抛弃第二个GZIP标头并遍历第二个gzip文件的字节边界,你可以合并它。

事实上,我曾考虑为此事编写一个开源程序,但不知道如何发布它。所以我让Joel成为我的项目经理,然后我走过他的解释和辩护,他终于明白了我想做什么,但他说他太忙了。 :(

当然,我可以自己写一个并尝试发布它。但我无法独自完成这项工作,因为我的日常工作属于我雇主的财产。

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

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

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

你也可以:

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

只要您的Linux / Unix发行版内置了zcat,其中大多数都是这样做的(并且您可以将其安装到那些没有的。)

可替换地:

zcat a.gz b.gz | gzip -c > c.txt.gz