gzipファイルのリストがあります:
file1.gz
file2.gz
file3.gz
これらのファイルを解凍せずに1つのgzipファイルに連結またはgzip圧縮する方法はあり ますか?
実際には、これをWebデータベース(CGI)で使用します。Webがユーザーからクエリを受信し、クエリに基づいてすべてのファイルを一覧表示し、バッチファイルでユーザーに提示する場所。
gzipファイルのリストがあります:
file1.gz
file2.gz
file3.gz
これらのファイルを解凍せずに1つのgzipファイルに連結またはgzip圧縮する方法はあり ますか?
実際には、これをWebデータベース(CGI)で使用します。Webがユーザーからクエリを受信し、クエリに基づいてすべてのファイルを一覧表示し、バッチファイルでユーザーに提示する場所。
回答:
gzipファイルを使用すると、次のようにファイルを簡単に連結できます。
cat file1.gz file2.gz file3.gz > allfiles.gz
あたりのgzip RFC、
gzipファイルは、一連の「メンバー」(圧縮されたデータセット)で構成されます。[...]メンバーはファイル内に次々と表示されるだけで、メンバーの前、間、または後に追加情報はありません。
これは、連結されたデータの単一のgzipファイルを作成することとまったく同じではないことに注意してください。特に、元のファイル名はすべて保持されます。ただし、gunzipはそれを連結と同等に処理するようです。
既存のツールは通常、追加メンバーのファイル名ヘッダーを無視するため、結果から個々のファイルを簡単に抽出することはできません。これを可能にしたい場合は、代わりにZIPファイルを作成してください。ZIPとGZIPはどちらも実際の圧縮にDEFLATEアルゴリズムを使用します(ZIPは他のいくつかの圧縮アルゴリズムとオプションをサポートしています-方法8はGZIPの圧縮に対応するものです)。違いはメタデータ形式にあります。メタデータは圧縮されていないため、gzipヘッダーを取り除き、代わりにZIPファイルヘッダーと中央ディレクトリレコードを追加するのは簡単です。gzip形式の仕様とZIP形式の仕様を参照してください。
cat
答えと同じですが、メタデータがいくつか追加されています。後でそれらを解凍して元のファイル名を取得し、必要に応じてすべてまたは一部を解凍できます。
.zip
ファイルに関するものです。アルゴリズムgzip(またはbzip2)を使用して複数のファイルを1つの圧縮アーカイブにまとめる標準的な方法は、tarを使用tar
することです。ファイルをまとめ(非圧縮)し、ファイル名と属性を保持します。gzipの仕事は結果を圧縮することです。これは、の-z
オプションを使用して1つのステップで実行することもできますtar
。結果のファイル拡張子は.tar.gz
または.tgz
です。すでに圧縮された.gzファイルをまとめたい場合は、tarを使用してください。すでに圧縮されているファイルに意味のあるそれ以上の圧縮は行いません。
zcat
、入力を解凍します。これにより、.gz
拡張子が付いた解凍された出力が得られます。
これがman 1 gzip
あなたの要件についてのことです。
複数の圧縮ファイルを連結できます。この場合、gunzipはすべてのメンバーを一度に抽出します。例えば:
gzip -c file1 > foo.gz gzip -c file2 >> foo.gz
次に
gunzip -c foo
と同等です
cat file1 file2
言うまでもなく、file1
に置き換えることができますfile1.gz
。
これに注意する必要があります:
gunzipはすべてのメンバーを一度に抽出します
したがって、すべてのメンバーを個別に取得するには、追加の何かを使用するか、必要に応じて書き込む必要があります。
ただし、これはmanページでも取り上げられています。
複数のメンバーを含む単一のアーカイブファイルを作成して、後でメンバーを個別に抽出できるようにする場合は、tarやzipなどのアーカイバを使用します。GNU tarは、
-z
gzipを透過的に呼び出すオプションをサポートしています。gzipは、tarの代わりとしてではなく、tarを補完するものとして設計されています。
猫を使うだけ。非常に高速です(私にとっては500 MBで0.2秒)
cat *gz > final
mv final final.gz
次に、zcatを使用して出力を読み取り、きれいであることを確認できます。
zcat final.gz
'gz -c'の他の答えを試しましたが、すでにgzip圧縮されたファイルを入力として使用するとゴミが出てしまいました(二重に圧縮されていると思います)。
PV:
さらに良いことに、あなたがそれを持っているなら、猫の代わりに「pv」:
pv *gz > final
mv final final.gz
これにより、プログレスバーが機能しますが、猫と同じように機能します。
これらのファイルのtarファイルを作成してから、tarファイルをgzipで圧縮して新しいgzipファイルを作成できます。
tar -cvf newcombined.tar file1.gz file2.gz file3.gz
gzip newcombined.tar
cat file1.gz file2.gz file3.gz > allfiles.gz
。それは本当に簡単です:)