Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

bzip2

bzip2形式でファイルを圧縮する
2015/05/20 08:00

対応OS: linux , freebsd, solaris
bzip2 [-c] [-d [-t]] [-f] [-k] [-v] [FILE...]

 bzip2コマンドは、FILE...で指定したファイルをbzip2形式で圧縮します。bzip2コマンドを実行すると、FILE...に指定した元のファイルは削除され、元ファイル名の末尾の「.bz2」を付与した名前で圧縮後のファイルが作成されます。

オプション
① -c
圧縮した結果を標準出力に出力します。
② -d
圧縮ではなく伸張(解凍)を行います。bunzip2コマンドを実行した場合と同じ結果を得ることができます。
③ -t
オプション「-d」とともに指定し、圧縮ファイルの形式が妥当かどうか(正しく解凍できるかどうか)を確認するために、一時的に解凍を行いますが、すぐに解凍後のファイルを削除します。この時、元のファイルは削除されません。圧縮ファイルの形式がbzip2形式でない場合には、エラーが発生するので、それによって妥当かどうかがわかります。
④ -f
圧縮後のファイル名と同一名のファイルが既に存在する場合に、エラーとせず無条件で上書きします。
⑤ -k
圧縮する元のファイルを削除しません。
⑥ -v
処理内容を表示します。
引数
① FILE...
圧縮するファイルのパスを指定します。複数指定する場合は、圧縮するファイルのパスをスペースで区切って指定します。省略した場合は標準入力からの入力となります。
ファイルをbzip2形式で圧縮する
[takeda]$ ls -l 
合計728
-rw-r--r-- 1 takeda takeda 738418 4月 19 12:56 file1
圧縮前のファイル
[takeda]$ bzip2 file1
[takeda]$ ls -l
合計188
-rw-r--r-- 1 takeda takeda 187762 4月 19 13:15 file1.bz2
圧縮後のファイル
圧縮前のファイルは削除されている
[takeda]$
圧縮前のファイルを残して圧縮する
[takeda]$ ls -l 
合計728
-rw-r--r-- 1 takeda takeda 738418 4月 19 12:56 file1
[takeda]$ bzip2 -k file1
オプション「-k」を指定すると、元のファイルを削除しない
[takeda]$ ls -l
合計916
-rw-r--r-- 1 takeda takeda 738418 4月 19 12:56 file1
-rw-r--r-- 1 takeda takeda 187762 4月 19 14:20 file1.bz2
[takeda]$
圧縮後ファイルの同一名ファイルを上書きする
[takeda]$ ls -l 
合計396
-rw-r--r-- 1 takeda takeda 20108 4月 19 12:56 file1
-rw-r--r-- 1 takeda takeda 187762 4月 19 14:20 file1.bz2
[takeda]$ bzip2 file1
bzip2: Output file file1.bz2 already exists.
オプション「-f」を付けないとエラーが発生
[takeda]$ bzip2 -f file1
[takeda]$ ls -l
合計8
-rw-r--r-- 1 takeda takeda 6931 4月 19 14:54 file1.bz2
ファイル「file1」を圧縮してできたファイルサイズや更新日時が異なることから、元々あったファイル「file1.bz2」とは違うファイルであることがわかる
[takeda]$
処理内容を表示する
[takeda]$ ls -l 
合計20
-rw-r--r-- 1 takeda takeda 20108 4月 19 13:54 file1
[takeda]$ bzip2 -v file1
file1: 2.901:1, 2.758 bits/byte, 65.53% saved, 20108 in, 6931 out.
[takeda]$
bzip2形式圧縮ファイルが妥当かどうかを確認する
[takeda]$ ls -l 
合計8
-rw-r--r-- 1 takedak takedak 6931 4月 19 13:54 file1.bz2
[takeda]$ bzip2 -d -t file1.bz2
オプション「-d」と「-t」を指定して、圧縮ファイルが妥当かどうかを調べる
ここではエラーが発生しないので妥当
[takeda]$ ls -l
合計8
-rw-r--r-- 1 takedak takedak 6931 4月 19 13:54 file1.bz2
元のファイルはそのまま
[takeda]$
HINT!

 lsコマンド

圧縮形式

 一ロに圧縮ファイルといっても実にさまざまな圧縮形式があり、どの圧縮形式が一番良いのか今もって混沌としている状態です。一般のファイルという意味ではWindowsがLZH形式とzip形式でUNIX環境がcompress形式(もう古いか?)とgzip形式でしょうか。そもそもなぜそんなに多くの形式があるのでしょうか?圧縮というのは、実に複雑で例えばファイルの中身が“0000111”である時、これを「連続する文字の数と文字一個」と定義した場合、“4031”となり3文字分圧縮できることになります。一方、元のデータが“0101”の場合はどうでしょう。同じ圧縮論理で圧縮するなら、“10111011”となり4文字も増えてしまいます。これは圧縮論理は必ずしもすべてのケースにおいて圧縮されるわけではないことを示唆しています。試しに一文字で定義したファイルを圧縮コマンドに通してみてください。やるまでもありませんね。一文字のテキストファイルはこれ以上小さくできないのですから。でもやってみて下さい。そしてファイルがどれくらい大きくなったかを見てみて下さい。きっと驚かれると思います。何でも圧縮すればよいというものでもないようです。

関連タグ

UNIXコマンド辞典トップページに戻る

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5