假设有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压缩日志文件合并为一个。 ;)感谢。
答案 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