web-dev-qa-db-ja.com

ファイルで使用されている圧縮の種類を検出する方法は? (ファイル拡張子が指定されていない場合)

ファイルで使用されている圧縮の種類をどのように検出できますか? (.Zip、.gz、.xz、またはその他の拡張子が指定されていないと仮定します)。

この情報は、そのファイルのヘッダーのどこかに保存されていますか?

45
22332112

最初の数バイトを見ると、これらの形式の1つであることがlikelyであると判断できます。次に、実際にisの1つであるかどうかをテストする必要があります。そのフォーマットに関連するユーティリティからの整合性チェックを使用するか、実際に解凍を進めます。

ヘッダー形式は説明にあります:

その他:

  • zlib(.zz)形式の説明 、2バイト(ビット単位)0aaa1000 bbbcccccで始まります。ここで、cccccが選択され、int16として表示される最初のバイトに256を加え、int16として表示される2番目のバイトが31の倍数。例:01111000(ビット)= 120(int16)、10011100(ビット)= 156(int16)、120 * 256 + 156 = 30876(31の倍数)
  • 圧縮(.Z)は0x1f、0x9dで始まります
  • bzip2(.bz2)は0x42、0x5a、0x68で始まります
68
Mark Adler

Linuxボックスを使用している場合は、「file」コマンドを使用します。

http://en.wikipedia.org/wiki/File_(command)

$ mv foo.Zip dink
$ file dink
dink: gzip compressed data, from Unix, last modified: Sat Aug  6 08:08:57 2011,
max compression
$
41
ct_

ファイルヘッダーを手動で検査する代わりに、TrIDなどのユーティリティを使用できます。リンクは、クロスプラットフォームのコマンドラインバージョンを指します。 WindowsにはGUIもあります。

4
M.Ali