Linuxでディレクトリを圧縮する方法|tar・gzip・zipの使い分け

Linux

Linuxを使っていると「このディレクトリをまとめて圧縮したい」という場面はとても多いですよね。

こんな場面で必要になります

  • バックアップとしてディレクトリを1つのファイルにまとめたい
  • 他のサーバーへ転送するときに容量を減らしたい
  • 圧縮してメール添付や長期保存したい
  • ログファイルを定期的にアーカイブしたい
  • 開発プロジェクトを配布用にパッケージ化したい

この記事では、Linuxでディレクトリを圧縮する代表的な方法を、targzipzipに分けて初心者にもわかりやすく解説します。

どのコマンドを使えばいいかも具体的に説明するので、すぐに実践できますよ!

スポンサーリンク

圧縮方式の選び方

用途別おすすめ方式

Linux環境でのバックアップ

  • tar.gz:最も一般的、ファイル属性も保持される

Windowsとの互換性重視

  • zip:どの環境でも開ける

最高圧縮率が欲しい

  • tar.xz:時間はかかるが最小サイズになる

高速処理優先

  • tarのみ:圧縮なしで最速

ファイル形式の特徴比較

形式圧縮率処理速度互換性ファイル属性保持
tarなし最速Linux系
tar.gz普通普通Linux系
tar.bz2高いやや遅いLinux系
tar.xz最高遅いLinux系
zip普通普通全環境

tarでディレクトリをまとめる(アーカイブ)

tarの基本概念

tarは「Tape ARchive」の略で、複数のファイルやディレクトリを1つのファイルにまとめるコマンドです。

重要なポイント

  • tar自体は圧縮しない(単にファイルを束ねるだけ)
  • ファイルの属性(パーミッション、所有者、タイムスタンプ)を保持
  • 通常はgzipやbzip2と組み合わせて使う

基本的なtarの使い方

ディレクトリをtarファイルにまとめる

tar cvf archive.tar /path/to/directory

オプションの意味

  • c:作成(create)
  • v:詳細表示(verbose)- 処理中のファイル名を表示
  • f:ファイル名を指定(file)

実用例

# Webサイトのディレクトリをバックアップ
tar cvf website_backup.tar /var/www/html

# ホームディレクトリをアーカイブ
tar cvf home_backup.tar /home/username

# 複数のディレクトリをまとめる
tar cvf multiple_backup.tar /etc /var/log /home

tarファイルの中身を確認

アーカイブの内容をリスト表示

tar tvf archive.tar

特定のファイルを探す

tar tvf archive.tar | grep "filename"

相対パスと絶対パスの注意点

絶対パスで作成(非推奨)

tar cvf backup.tar /var/www/html
# 展開時に /var/www/html に展開される

相対パスで作成(推奨)

cd /var/www
tar cvf backup.tar html
# 展開時に現在のディレクトリに html フォルダが作られる

tar + gzip で圧縮する

gzip圧縮の基本

tarにzオプションを追加すると、自動的にgzipで圧縮されます。

基本構文

tar czvf archive.tar.gz /path/to/directory

新しく追加されるオプション

  • z:gzipで圧縮(zipのz)

実用的な使用例

Webサイトのバックアップ

tar czvf website_$(date +%Y%m%d).tar.gz /var/www/html

ログファイルのアーカイブ

tar czvf logs_$(date +%Y%m%d).tar.gz /var/log

開発プロジェクトのパッケージ化

cd /home/user/projects
tar czvf myproject_v1.0.tar.gz myproject/

圧縮レベルの調整

gzipの圧縮レベルは1(最速)から9(最高圧縮)まで指定できます。

高速圧縮(レベル1)

GZIP=-1 tar czvf archive.tar.gz /path/to/directory

最高圧縮(レベル9)

GZIP=-9 tar czvf archive.tar.gz /path/to/directory

デフォルト(レベル6)

tar czvf archive.tar.gz /path/to/directory

より高い圧縮率:bzip2とxz

bzip2圧縮(tar.bz2)

gzipより高い圧縮率が得られますが、処理時間は長くなります。

tar cjvf archive.tar.bz2 /path/to/directory

オプション

  • j:bzip2で圧縮

xz圧縮(tar.xz)

最も高い圧縮率が得られる方式です。

tar cJvf archive.tar.xz /path/to/directory

オプション

  • J:xzで圧縮(大文字のJ)

圧縮方式の比較例

同じディレクトリを圧縮した場合のサイズ比較(例):

# 元のサイズ:100MB
archive.tar      # 100MB(圧縮なし)
archive.tar.gz   # 25MB(gzip)
archive.tar.bz2  # 20MB(bzip2)
archive.tar.xz   # 15MB(xz)

zipでディレクトリを圧縮する

zipの特徴

zipはWindowsでも標準的に使われている形式なので、環境を問わず便利です。

メリット

  • Windows、Mac、Linuxで共通して使える
  • 個別ファイルの展開が可能
  • パスワード保護機能がある

デメリット

  • Linuxのファイル属性が完全には保持されない
  • tarに比べて圧縮率がやや劣る場合がある

基本的なzipの使い方

ディレクトリをzip圧縮

zip -r archive.zip /path/to/directory

オプション

  • -r:再帰的(recursive)- サブディレクトリも含める

実用例

# Webサイトのディレクトリを圧縮
zip -r website_backup.zip /var/www/html

# プロジェクトフォルダを配布用に圧縮
zip -r myproject.zip project_folder/

# 日付入りのバックアップ
zip -r backup_$(date +%Y%m%d).zip /home/user/documents

zipの便利なオプション

パスワード保護付きzip

zip -r -P password archive.zip /path/to/directory

圧縮レベルを指定(0-9)

zip -r -9 archive.zip /path/to/directory  # 最高圧縮
zip -r -1 archive.zip /path/to/directory  # 最速圧縮

特定のファイルを除外

zip -r archive.zip /path/to/directory -x "*.log" "*.tmp"

圧縮ファイルを解凍する方法

tar系ファイルの展開

tar(無圧縮)

tar xvf archive.tar

tar.gz

tar xzvf archive.tar.gz

tar.bz2

tar xjvf archive.tar.bz2

tar.xz

tar xJvf archive.tar.xz

展開先ディレクトリを指定

tar xzvf archive.tar.gz -C /path/to/destination

zipファイルの展開

基本的な展開

unzip archive.zip

展開先を指定

unzip archive.zip -d /path/to/destination

中身を確認してから展開

unzip -l archive.zip  # リスト表示
unzip archive.zip     # 展開実行

実際の運用場面での活用例

定期バックアップスクリプト

#!/bin/bash
# 日次バックアップスクリプト

DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www/html"

# バックアップ実行
tar czvf ${BACKUP_DIR}/website_${DATE}.tar.gz ${SOURCE_DIR}

# 7日以上古いバックアップを削除
find ${BACKUP_DIR} -name "website_*.tar.gz" -mtime +7 -delete

echo "バックアップ完了: website_${DATE}.tar.gz"

ログローテーション

# 月次でログをアーカイブ
tar czvf /var/log/archive/logs_$(date +%Y%m).tar.gz /var/log/*.log

# 元のログファイルをクリア
> /var/log/access.log
> /var/log/error.log

プロジェクト配布

# 開発プロジェクトを配布用にパッケージ化
cd /home/developer/projects
tar czvf myapp_v2.1.tar.gz myapp/ --exclude=".git" --exclude="node_modules"

除外ファイルの指定

tarで特定ファイルを除外

–excludeオプション

tar czvf backup.tar.gz /var/www/html --exclude="*.log" --exclude="cache/*"

除外リストファイルを使用

# .tarignore ファイルを作成
echo "*.log" > .tarignore
echo "cache/*" >> .tarignore
echo ".git/*" >> .tarignore

# 除外リストを使って圧縮
tar czvf backup.tar.gz /path/to/directory --exclude-from=.tarignore

zipで特定ファイルを除外

zip -r archive.zip /path/to/directory -x "*.log" "*/cache/*" "*/.git/*"

よくある質問とトラブルシューティング

Q:「Permission denied」エラーが出ます

A:読み取り権限がないファイルがあります。sudoを使うか、所有者を確認してください。

sudo tar czvf backup.tar.gz /var/log

Q:ディスク容量が足りません

A:別のディスクに出力するか、パイプを使って直接転送してください。

tar czv /path/to/directory | ssh user@server 'cat > backup.tar.gz'

Q:シンボリックリンクはどう処理されますか?

A:tarはデフォルトでシンボリックリンクをそのまま保持します。実体をコピーしたい場合は-hオプションを使用してください。

Q:巨大なディレクトリを圧縮するときの注意点は?

A:事前にサイズを確認し、十分な空き容量があることを確認してください。また、niceコマンドで優先度を下げることを検討してください。

nice -n 19 tar czvf large_backup.tar.gz /huge/directory

まとめ:目的に応じて適切な圧縮方式を選ぼう

この記事のポイント

やりたいことおすすめコマンド特徴
Linuxでのバックアップtar czvf backup.tar.gz /path/to/dir属性保持、標準的
Windows互換性重視zip -r backup.zip /path/to/dir全環境で使用可能
最高圧縮率tar cJvf backup.tar.xz /path/to/dir時間かかるが最小サイズ
高速処理tar cvf backup.tar /path/to/dir圧縮なしで最速

選択の基準

  • Linux環境のみ:tar.gz を標準に
  • 他環境との共有:zip を選択
  • 容量を最小にしたい:tar.xz を使用
  • 処理速度重視:tar のみ使用

運用のコツ

  • 定期バックアップはスクリプト化する
  • 大きなファイルは事前にサイズを確認
  • 除外ファイルを適切に指定してサイズ削減
  • 圧縮レベルは用途に応じて調整

これらの方法を覚えておけば、Linuxでのバックアップやファイル転送がぐっと楽になります。システム管理の基本スキルとして、ぜひマスターしてください。

コメント

タイトルとURLをコピーしました