【Linux】bzip2/bunzip2コマンドでファイルを高圧縮・展開する

目次

概要

ファイルを「Burrows-Wheeler変換」というアルゴリズムを用いて圧縮(エンコード)・展開(デコード)するコマンドです。

Linux標準の圧縮形式としては、gzipよりも処理速度は劣りますが、より高い圧縮率を実現できるのが特徴です。拡張子には一般的に .bz2 が付与されます。

仕様(引数・オプション)

構文

bzip2 [オプション] [ファイル名]
bunzip2 [オプション] [ファイル名]

bunzip2bzip2 -d と等価です。

主な引数・オプション

オプション説明
-d / –decompressファイルを展開(解凍)します。
-z / –compressファイルを圧縮します(デフォルト動作)。
-k / –keep処理後に元のファイルを削除せず残します(デフォルトは削除)。
-f / –force出力ファイルと同名のファイルが存在する場合、強制的に上書きします。
-c / –stdout結果を標準出力に書き出します(元のファイルは変更されません)。
-s / –smallメモリ使用量を削減して実行します(速度は低下します)。
-1 .. -9圧縮レベルを指定します。-1が最速・低圧縮、-9が低速・最高圧縮です(デフォルトは9)。

基本の使い方

テキストファイル(ここでは service.log)を圧縮し、サイズの変化を確認してから、元に戻す手順です。

# 元のファイルを確認
ls -lh service.log

# ファイルを圧縮(元ファイルは削除され、.bz2ファイルが生成される)
bzip2 service.log

# 圧縮後のファイルとサイズを確認
ls -lh service.log.bz2

# 圧縮ファイルを展開(元に戻す)
bzip2 -d service.log.bz2

実行結果例

-rw-r--r-- 1 user user 10M  1月 20 10:00 service.log

-rw-r--r-- 1 user user 2.1M 1月 20 10:00 service.log.bz2

-rw-r--r-- 1 user user 10M  1月 20 10:00 service.log

元のファイルを消さずに圧縮する

デフォルトでは元のファイルが消えますが、-k オプションで保持できます。

# 元のファイルを残したまま圧縮ファイルを作成
bzip2 -k service.log

実践コマンド

特定ディレクトリ内のファイルを再帰的に個別に圧縮する

bzip2 自体にはディレクトリを再帰的に辿る機能がないため、find コマンドと組み合わせて実行します。

以下は、archive/ ディレクトリ配下にある全てのファイルを個別に .bz2 形式に圧縮する例です。

# archiveディレクトリ以下のファイルのみを対象に、一つずつbzip2を実行
find archive/ -type f -exec bzip2 {} \;

実行結果例

# 実行前
archive/log1.txt
archive/subdir/log2.txt

# 実行後(すべて個別に圧縮される)
archive/log1.txt.bz2
archive/subdir/log2.txt.bz2

カスタムポイント

  • 圧縮レベルの調整 (-1 〜 -9)とにかく速く圧縮したい場合は -1 を、時間はかかってもサイズを極限まで小さくしたい場合は -9 を明示します。Bashbzip2 -1 large_data.csv
  • 標準出力の活用 (-c)圧縮結果をファイルに保存せず、パイプラインで別のコマンドに渡したい場合に使用します。Bash# 圧縮したデータをそのままssh経由で転送する例 bzip2 -c database.sql | ssh remote_host "cat > database.sql.bz2"

注意点

  1. ディレクトリ自体の圧縮は不可bzip2 は単一ファイルの圧縮に特化しています。ディレクトリを丸ごと一つのアーカイブにしたい場合は、必ず tar コマンドと組み合わせてください(応用参照)。
  2. デフォルトで元ファイルが消えるオプションなしで実行すると、圧縮・解凍ともに処理成功後に元のファイルが削除されます。不安な場合は -k オプションを使用する癖をつけると安全です。
  3. 処理速度gzip に比べて圧縮率が高い反面、CPU負荷が高く、処理に時間がかかります。リアルタイム性が求められる用途には不向きな場合があります。

応用

tarコマンドと組み合わせてディレクトリをアーカイブ圧縮する

実務では、bzip2 単体ではなく、tar コマンドのオプションとして利用することが最も多いです。

-j オプションを指定することで、tarアーカイブ作成とbzip2圧縮を同時に行います。

# logsディレクトリをまとめて logs.tar.bz2 に圧縮
tar -cjvf logs.tar.bz2 logs/

# logs.tar.bz2 を展開
tar -xjvf logs.tar.bz2

まとめ

bzip2 は、保存容量の節約を最優先したい場合に非常に有効なツールです。

「ログファイルの長期保存」や「帯域の細いネットワークでのファイル転送」など、多少のCPUリソースと時間を犠牲にしてもファイルサイズを小さくしたい場面で、gzip の代わりとして活用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次