bzip2:実際に解凍せずにファイルの解凍サイズを確認してください。

bzip2:実際に解凍せずにファイルの解凍サイズを確認してください。

大きな圧縮ファイルがあり、bzip2実際に解凍せずに解凍されたサイズを確認する必要があります(gzip -l file.gzまたは同様xz -l file.xz)。これを達成するためにどのように使用しますかbzip2

ベストアンサー1

コメントに関連付けられた回答で述べたように、信頼できる唯一の方法は(パイプで)解凍してバイト数を計算することです。

$ bzcat file.bz2 | wc -c
1234

または、不要な配管なしでこれを行うツールを見つけます(もう少し効率的かもしれません)。

$ 7z t file.bz2
[...]
Everything is Ok
Size:       1234

これはgzipやその他の形式でも機能します。gzip -l file.gz寸法は印刷されていますが、誤った結果が出ることがあります。ファイルが特定のサイズを超えると、次の結果が表示されます。

$ gzip --list foobar.gz 
         compressed        uncompressed  ratio uncompressed_name
           97894400            58835168 -66.4% foobar
$ gzip --list foobar.gz 
         compressed        uncompressed  ratio uncompressed_name
         4796137936                   0   0.0% foobar

または、ファイルがリンクされているか、まったく正しく生成されていない場合:

$ truncate -s 1234 foobar
$ gzip foobar
$ cat foobar.gz foobar.gz > barfoo.gz
$ gzip -l barfoo.gz 
         compressed        uncompressed  ratio uncompressed_name
                 74                1234  96.0% barfoo
$ zcat barfoo.gz | wc -c
2468

寸法が一致しないため、とにかく信頼できません。

時にはプロフィールの内容に応じて不正行為をすることもあります。たとえば、圧縮ファイルシステムイメージで、先頭にメタデータヘッダーがある場合は、そのヘッダーを解凍してファイルシステムの全体サイズを読み取ることができます。

$ truncate -s 1234M foobar.img
$ mkfs.ext2 foobar.img
$ bzip2 foobar.img
$ bzcat foobar.img.bz2 | head -c 1M > header.img
$ tune2fs -l header.img
tune2fs 1.45.4 (23-Sep-2019)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          95b64880-c4a7-4bea-9b63-6fdcc86d0914
[...]
Block count:              315904
Block size:               4096

したがって、小さな部分を抽出すると、315904 4096バイトのブロック、つまり1234MiBであることがわかります。

圧縮されたファイルの実際のサイズの保証はありませんが(大きくても小さくても)、奇妙なことはないと仮定すると、gzip -l何よりも信頼できます。

最後に、これらのファイルを最初に作成した場合は、サイズだけを記録してください。

おすすめ記事