Linuxを使っていると「このディレクトリをまとめて圧縮したい」という場面はとても多いですよね。
こんな場面で必要になります
- バックアップとしてディレクトリを1つのファイルにまとめたい
- 他のサーバーへ転送するときに容量を減らしたい
- 圧縮してメール添付や長期保存したい
- ログファイルを定期的にアーカイブしたい
- 開発プロジェクトを配布用にパッケージ化したい
この記事では、Linuxでディレクトリを圧縮する代表的な方法を、tar
・gzip
・zip
に分けて初心者にもわかりやすく解説します。
どのコマンドを使えばいいかも具体的に説明するので、すぐに実践できますよ!
圧縮方式の選び方

用途別おすすめ方式
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でのバックアップやファイル転送がぐっと楽になります。システム管理の基本スキルとして、ぜひマスターしてください。
コメント