【Mac/Ubuntu】ターミナルで圧縮・解凍!zip, tar.gz, 7zを使いこなす実践ガイド

ALL

こんにちは、Tech Samuraiです!
開発プロジェクトのバックアップを取ったり、他の人にファイルを共有したりする際、「圧縮」は欠かせない操作です。しかし、コマンドラインでの圧縮方法は形式ごとにコマンドが異なり、オプションも複雑で、WindowsやUbuntuからMacに移行した際、戸惑うことも多いですよね。

結論から言うと、**「何をしたいか」によって最適な形式とコマンドを使い分ける**のが一番です。

この記事では、MacとUbuntuのターミナル(zshやbash)で使う主要な圧縮形式について、その特徴と、私がよく使う便利なオプションを含めた実践的なコマンドを、備忘録としてまとめます。


💻 用途別のおすすめ圧縮形式

まずは、どの形式をいつ使うべきか。私の使い分けは以下の通りです。

  1. Windowsユーザーを含む不特定多数と共有する場合: zip
    理由: macOS、Windows、Linuxすべてで標準的にサポートされており、受け取った相手が困ることがほぼありません。互換性最強です。
  2. MacやLinuxユーザー間での共有 / 開発プロジェクトのバックアップ: tar.gz
    理由: Unix系のOSで古くから使われているデファクトスタンダード。ファイルのパーミッション(実行権限など)を正しく保持したまま圧縮できます。
  3. とにかく圧縮率を最優先したい場合: tar.xz または 7z
    理由: gzip`よりも新しい圧縮アルゴリズムを使い、より高い圧縮率を実現します。大容量のデータをバックアップする際に有効です。

📦 各形式の比較と特徴

形式特徴圧縮率互換性Mac/Ubuntu標準
zipファイルを個別に圧縮。互換性◎。◎ 抜群◎ (zip, unzip)
tar.gz複数ファイルをtar`で束ねてからgzip`で圧縮。パーミッション維持◎。○ (Unix系◎)◎ (tar)
tar.xztar`で束ねてからxz`で圧縮。◎ 高い△ (比較的新しい)◎ (tar)
7z独自の7z`形式。圧縮率◎。◎ 高い× (専用ソフト要)× (要インストール)

補足: tar`は「Tape Archive」の略で、元々は複数のファイルを1つにまとめる(アーカイブする)だけのコマンドです。tar.gz`tar`でまとめたものをgzip`で圧縮したものです。


🚀 基本的なコマンド例(オプション解説付き)

macOSとUbuntuのターミナルには、zip`, `unzip`, `tar`が標準で入っています。7z`を使いたい場合は、Homebrewやaptでインストールが必要です。

# macOS (Homebrew) の場合
brew install p7zip

# Ubuntu (apt) の場合
sudo apt update
sudo apt install p7zip-full

1. zip (互換性重視)

# 圧縮: my_archive.zip に directoryA と fileB を圧縮 (-r: 再帰的)
zip -r my_archive.zip directoryA fileB

# 解凍: my_archive.zip を現在の場所に解凍
unzip my_archive.zip

便利なオプション:

unzip -l my_archive.zip  # 解凍せずに、中身のファイル一覧を表示します。
unzip my_archive.zip -d ./unzip_here  # -dオプションで、解凍先のディレクトリを指定できます。

2. tar.gz (Mac/Linux標準)

# 圧縮 (-c: create, -z: gzip, -f: file)
# archive.tar.gz に directoryA と directoryB を圧縮
tar -czf archive.tar.gz directoryA directoryB

# 解凍 (-x: extract, -f: file)
tar -xf archive.tar.gz

便利なオプション:

  • tar -czvf ...`: -v` (verbose) を付けると、圧縮・解凍中のファイル名をターミナルに表示します。
  • tar -tf archive.tar.gz: -t` (list) で、中身のファイル一覧を表示します。
  • tar -xf archive.tar.gz -C ./unzip_here: -C`オプションで、解凍先のディレクトリを指定できます。

3. tar.xz (圧縮率重視)

tar.gz`-z` (gzip) を -J` (xz) に変えるだけです。

# 圧縮 (-c: create, -J: xz, -f: file)
tar -cJf archive.tar.xz directoryA directoryB

# 解凍 (tarが賢く自動判別してくれるので -xf だけでOK)
tar -xf archive.tar.xz

4. 7z (最高圧縮率・要インストール)

# 圧縮 (a: archive)
7z a archive.7z directoryA fileB

# 解凍 (x: eXtract with full paths)
7z x archive.7z

便利なオプション:

  • 7z l archive.7z: l` (list) で、中身のファイル一覧を表示します。
  • 7z x archive.7z -o./unzip_here: -o`オプション(直後にパス)で、解凍先のディレクトリを指定できます。

🐍 Git管理プロジェクトでの最強の技:`git archive`

RyeやGitを使っている開発環境では、ターミナルの圧縮コマンドを直接使うよりも、git archive`コマンドを使うのが非常にスマートです。

これは、Gitリポジトリの現在の状態を、.git`ディレクトリや.gitignore`で無視されるファイル(Ryeが作る.venv`など)を**自動的に除外して**、zipやtar.gzとして直接書き出すコマンドです。

# 現在のブランチ(HEAD)をzip形式で書き出す
git archive -o ../my_project.zip HEAD

# mainブランチをtar.gz形式で書き出す
git archive --format=tar.gz -o ../my_project.tar.gz main

これにより、仮想環境や__pycache__`などの不要なファイルを含まない、クリーンなプロジェクトファイル一式を、誰かに配布するために素早く作成できます。


🪟【補足】Windowsユーザーの場合

最近のWindows 10/11では、標準でtar`コマンドやzip`コマンドが使えるようになっていますが、多くのユーザーはGUI操作に慣れています。

  • 圧縮: フォルダやファイルを右クリックし、「送る」→「圧縮(zip 形式)フォルダー」を選択します。
  • 解凍: .zip`ファイルを右クリックし、「すべて展開」を選択します。.tar.gz`なども、最近のWindows 11では標準で解凍できるようになりました。
  • `7z`: 7z`をインストールすると、右クリックメニューから高圧縮な.7z`形式も扱えるようになります。

まとめ

MacやLinuxのターミナル操作は、最初は戸惑うかもしれませんが、慣れると非常に強力です。まとめると、私の使い分けは以下の通りです。

  • 普段Mac/Linux間で使うなら: tar -czvf ... (tar.gz + 詳細表示)
  • Windowsの人に渡すなら: zip -r ...
  • Git管理下のプロジェクトを配布するなら: git archive ...

このチートシートが、あなたのコマンドライン操作の助けになれば幸いです!

コメント

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