14

a.gz と b.gz があるとしましょう。

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

このプログラムをやりたいです。もちろん、

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

動作しません。a.gz の最後の DEFLATE ブロックには BFINAL があり、b.gz の GZIP ヘッダーがあるためです。(RFC1951、RFC1952 を参照) ただし、BFINAL の設定を解除し、2 番目の GZIP ヘッダーを破棄して、2 番目の gzip ファイルのバイト境界を通過すると、マージできます。

実は、この件についてオープンソース プログラムを書こうと思ったのですが、それを公開する方法がわかりませんでした。そこで私は Joel に私のプログラム マネージャーを依頼し、私の説明と弁明について説明しました。彼は最終的に私がやりたいことを理解してくれましたが、忙しすぎると言いました。:(

もちろん、自分で書いて、自分のやり方で公開することもできます。しかし、私の日中の仕事は雇用主の所有物であるため、これを一人で行うことはできません。

ボランティアはいますか?プログラマー(私)、パブリッシャー(あなた)、またはプログラマー(あなた)、パブリッシャー(私)として働くことができます。私が必要とするのは、いくらかの信用です。RFC3320 で説明されている Universal Decompressor Virtual Machine を実装したことがあります。だから私はこれが実現可能であることを知っています。

または、そのプログラムを教えてください。365 (日) の gzip 圧縮されたログ ファイルを 1 つにマージするなど、ログ ファイルの管理に非常に役立ちます。;)

ありがとう。

4

2 に答える 2

34

もちろん、 cat a.gz b.gz > c.gz は機能しません。

実際、それはうまく機能します。私はちょうどそれをテストしました。gzip の man ページにも (一種の) 文書化されています。

   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が組み込まれています(そうでないものにはインストールできます)。

または:

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