このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:tarとgzipを組み合わせる

tarとgzipを組み合わせる
ファイルやディレクトリを効率的にまとめて圧縮・展開する方法として、tar
コマンドとgzip
コマンドの組み合わせが広く利用されています。ここでは、tar
とgzip
を組み合わせて複数のファイルやディレクトリを一つの圧縮ファイルにまとめる方法について、図や表を用いて分かりやすく解説します。

なぜtarとgzipを組み合わせるのか
- gzipの制限
・gzip
は単一のファイルしか圧縮できません。 - 複数ファイルの圧縮
・複数のファイルやディレクトリを一つにまとめて圧縮したい場合があります。 - 解決策
・まずtar
でファイルやディレクトリを一つのアーカイブファイルにまとめ、その後gzip
で圧縮します。
tarとgzipの基本的な使い方
tarコマンドでアーカイブを作成
【書式】tar cf アーカイブ名.tar ファイルやディレクトリ
コマンド例
tar cf dir.tar dir
gzipコマンドで圧縮
【書式】gzip アーカイブ名.tar
コマンド例:dir.tar.gz
という圧縮ファイルが作成される。
gzip dir.tar
tarとgzipの組み合わせの流れ
以下のように、tar
でアーカイブを作成し、その後gzip
で圧縮します。
tarとgzipの組み合わせ
ファイルやディレクトリ → tarでアーカイブ(dir.tar) → gzipで圧縮(dir.tar.gz)
実践:tarとgzipを使った圧縮

ステップ1:サンプルディレクトリとファイルの作成
user01@ubuntu:~$ mkdir dir
user01@ubuntu:~$ touch dir/file-{1..9}.txt
説明
dir
というディレクトリを作成。file-1.txt
からfile-9.txt
までのファイルを作成。
ステップ2:tarコマンドでアーカイブを作成し、gzipで圧縮
user01@ubuntu:~$ tar cf dir.tar dir
user01@ubuntu:~$ gzip dir.tar
結果
user01@ubuntu:~$ ls -l
合計 52
drwxrwxr-x 2 user01 user01 4096 12月 2 01:02 dir
-rw-rw-r-- 1 user01 user01 213 12月 2 01:02 dir.tar.gz
まとめて圧縮するコマンド
一度にコマンドを実行する場合
user01@ubuntu:~$ tar czf dir.tar.gz dir
説明
tar
のz
オプションを使用することで、gzip
での圧縮を同時に行います。c
:新規アーカイブの作成。z
:gzipによる圧縮。f
:ファイル名の指定。
tarコマンドだけで圧縮・展開
gzip圧縮を含むtarコマンド
圧縮
user01@ubuntu:~$ tar czf dir.tar.gz dir
展開
user01@ubuntu:~$ tar xzf dir.tar.gz
オプションの説明
オプション | 説明 |
---|---|
c | 新規アーカイブの作成 |
x | アーカイブの展開 |
z | gzipによる圧縮・展開 |
f | ファイル名を指定 |
パイプとリダイレクトを使ったtar+gzファイルの作成
古いtar
コマンドにはgzip
の機能がなかったため、パイプラインを利用してtar
とgzip
を組み合わせていました。この手法は現在でも学ぶ価値があります。
パイプラインを使った例
user01@ubuntu:~$ tar cf - dir | gzip -c > dir.tar.gz
説明
tar cf - dir
:-
は標準出力を意味し、アーカイブを標準出力に出力。|
:パイプで次のコマンドに出力を渡す。gzip -c
:標準入力から受け取ったデータを圧縮し、標準出力に出力。>
:出力リダイレクトでファイルに保存。
図:パイプラインによる圧縮処理
dir
↓
tar cf - dir(アーカイブデータを標準出力)
↓
gzip -c(圧縮データを標準出力)
↓
出力リダイレクト(dir.tar.gz)
一時ファイルを使わないメリット
- ディスク容量の節約:大きなファイルを扱う場合、一時ファイルを作成しないためディスク容量を節約できます。
- 効率的な処理:一連の処理をメモリ上で行うため、高速に処理できます。
展開時のコマンド
user01@ubuntu:~$ gzip -d -c dir.tar.gz | tar xf -
説明
gzip -d -c dir.tar.gz
:圧縮ファイルを展開し、標準出力に出力。|
:パイプで次のコマンドに出力を渡す。tar xf -
:標準入力から受け取ったアーカイブを展開。ファイル名として-
を指定すると標準入力から読み込みます。
リモートホストとのデータ転送への応用
ssh
コマンドと組み合わせることで、リモートホスト上のディレクトリを直接手元にコピーすることができます。
リモートホストからデータを取得
user01@ubuntu:~$ ssh user01@serverA 'tar czf - dir' | tar xzf -
説明
ssh user01@serverA 'tar czf - dir'
:リモートホスト上でtar
コマンドを実行し、圧縮データを標準出力に出力。|
:パイプでローカルのtar
コマンドにデータを渡す。tar xzf -
:受け取った圧縮データを展開。
メリット
- 効率的なデータ転送:圧縮された状態でデータを転送するため、ネットワーク帯域を節約。
- 一時ファイル不要:中間ファイルを作成せずにデータを取得。
ここで作成したファイルの削除
作成したファイルやディレクトリを削除してクリーンアップします。
user01@ubuntu:~$ rm -rf dir dir.tar dir.tar.gz
- 注意:
rm -rf
コマンドは強力な削除コマンドです。削除するファイルやディレクトリを十分に確認してから実行してください。
まとめ
tar
とgzip
の組み合わせ
・tar
で複数のファイルやディレクトリを一つのアーカイブファイルにまとめる。
・その後、gzip
で圧縮してファイルサイズを削減。tar
コマンドの便利なオプション
・z
オプションを使用することで、tar
だけで圧縮・展開が可能。- パイプラインの活用
・パイプとリダイレクトを組み合わせて、一時ファイルを作成せずに効率的に圧縮・展開。 - リモートホストとの連携
・ssh
コマンドと組み合わせて、リモートのデータを直接圧縮・転送・展開。 - メリット
・ディスク容量やネットワーク帯域の節約。
・処理の高速化。
・スクリプトや自動化処理への応用。
次のステップ
tar
とgzip
の他にも、bzip2
やxz
などの圧縮ツールも存在します。- 圧縮率や処理速度を考慮して、適切なツールを選択してください。
これで、tar
とgzip
を組み合わせてファイルやディレクトリを効率的に圧縮・展開する方法の解説を終わります。実際にコマンドを試して、使い方に慣れていきましょう。