2つのGZIPファイルを解凍せずにマージするGZIPマージはありますか?
質問
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の設定を解除し、2番目のGZIPヘッダーを破棄して、2番目のgzipファイルのバイト境界をたどると、マージできます。
実際、私はこの問題のためにオープンソースプログラムを書くことを考えましたが、それを公開する方法を知りませんでした。だから私はジョエルに私のプログラムマネージャーになるように頼みました、そして私は彼に私の説明と防御を説明しました。 :(
もちろん、私は自分で書いてそれを公開する方法を試すこともできます。しかし、私の一日の仕事は私の雇用者の財産であるため、私はこれを一人で行うことはできません。
ボランティアはいますか?プログラマー(私)、パブリッシャー(あなた)またはプログラマー(あなた)、パブリッシャー(私)として働くことができます。必要なのはクレジットです。 RFC3320に記述されているUniversal Decompressor Virtual Machineを実装したことがあります。だから、これが実現可能であることを知っています。
または、そのプログラムを教えてください。 365(日)のgzip圧縮されたログファイルを1つにマージするなど、ログファイルの管理に非常に役立ちます。 ;)
ありがとう。
解決
もちろん、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
他のヒント
次のこともできます:
zcat a.gz b.gz > c.txt && gzip c.txt
ご使用のLinux / Unixディストリビューションにzcatが組み込まれている限り、それらのほとんどに組み込まれています(そうでないものに対してもインストールできます)。
別の方法:
zcat a.gz b.gz | gzip -c > c.txt.gz