2008-11-08 59 views
13

假设有a.gz和b.gz.是否有GZIP合并合并两个GZIP文件而不解压缩?

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

我想有这样的计划。当然,

$猫a.gz b.gz> c.gz

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

事实上,我想为这件事写一个开源程序,但不知道如何发布它。于是我请求Joel成为我的项目经理,然后我通过解释和辩护走过他,他终于明白我想做什么,但说他太忙了。 :(

当然,我可以写一个自己,尽我的方式来发布。但是因为我的日常工作是属于我的雇主的财产,我不能单独做到这一点。

有没有志愿者我们可以像程序员(我),出版商(你)或程序员(你),出版商(我)一样工作,我需要的只是一些功劳。 。

或者,你可以指向我计划这将是用于管理像合并365(天)gzip压缩的文件记录到一个日志文件非常有用;。)

谢谢。

+0

只是出于好奇,为什么* *你会想这样做?如果你只是想将某个东西表示为一个单独的文件,为什么不把它放在一边呢? – 2008-11-08 01:41:21

+1

如果你有一个MVC框架,并且希望加快头文件模板,动态内容模板和页脚模板的传送速度,你可以选择压缩。如果事先压缩了页眉模板和页脚模板,它可能会加快速度。 – yogman 2008-11-08 06:31:06

回答

32

当然,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 
4

你还可以:

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

只要你的Linux/Unix发行已用zcat建成,其中大部分做的(你可以安装它是不是没有兴趣。)

或者:

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