【问题标题】:Is there a GZIP merger that merges two GZIP files without decompressing them?是否有合并两个 GZIP 文件而不解压缩它们的 GZIP 合并?
【发布时间】:2010-09-21 09:52:31
【问题描述】:

假设有 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文件的字节边界,就可以合并了。

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

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

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

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

谢谢。

【问题讨论】:

  • 只是出于好奇,为什么你想这样做?如果您只想将某些内容表示为单个文件,为什么不直接压缩它呢?
  • 如果您有一个 MVC 框架并希望加快页眉模板、动态内容模板和页脚模板的交付,您会选择压缩。如果你预先压缩一个页眉模板和一个页脚模板,它可以加快速度。

标签: merge gzip deflate


【解决方案1】:

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

【讨论】:

  • 哦,它就像一个魅力!谢谢!我想这一切都适用于 PerlIO::gzip 之类的 Perl 实现。
  • 对于创建文件,我希望没有问题。为了阅读它们,在最坏的情况下,您可以使用循环或外壳输出到 zcat/gunzip。
【解决方案2】:

你也可以:

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

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

或者:

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

【讨论】:

  • 这将是我从已压缩文件开始时的解决方案。 Andru Luvisi 的解决方案从未压缩的文件开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2017-04-02
  • 1970-01-01
  • 2013-09-24
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多