タイトル: unzip ファイルの解凍
SEOタイトル: Linux unzip コマンド完全ガイド
| この記事の要点 |
|
unzip コマンドの基本
Linux / macOS で zip ファイルを展開する標準ツールです。RHEL / CentOS では yum install unzip、Debian / Ubuntu では apt install unzip で導入します。
# インストール
sudo apt install unzip # Debian/Ubuntu
sudo yum install unzip # RHEL/CentOS
sudo dnf install unzip # Fedora/RHEL 8+
# 基本: カレントディレクトリに展開
unzip archive.zip
# 解凍先を指定
unzip archive.zip -d /tmp/extracted/
# 解凍先が無ければ自動作成される
主なオプション一覧
| オプション | 動作 |
|---|---|
-d DIR | 解凍先ディレクトリ |
-l | 中身のファイル一覧(解凍しない) |
-v | 詳細一覧(CRC / 圧縮率も表示) |
-t | 整合性テスト(解凍しない) |
-p FILE | 標準出力へ展開(パイプ用) |
-o | 確認なしで上書き |
-n | 既存ファイルは飛ばす(確認なし) |
-q | 静かに(進捗を出さない) |
-j | ディレクトリ構造を無視してフラット展開 |
-x PATTERN | 除外パターン |
-P passwd | パスワード指定 |
-O CHARSET | 文字コード指定(cp932 / sjis 等) |
中身を確認してから解凍
# ファイル一覧表示(解凍はしない)
unzip -l archive.zip
# Archive: archive.zip
# Length Date Time Name
# --------- ---------- ----- ----
# 123 2026-01-01 12:00 readme.txt
# 456 2026-01-01 12:01 src/index.html
# --------- -------
# 579 2 files
# 詳細表示(CRC・圧縮率も)
unzip -v archive.zip
# 整合性テスト(壊れていないか)
unzip -t archive.zip
# → No errors detected in compressed data of archive.zip.
上書き制御
デフォルトでは既存ファイルがある時に対話プロンプトが出ます。バッチ処理では -o か -n を必ず付けます。
# 対話プロンプト例
unzip archive.zip
# replace existing-file? [y]es, [n]o, [A]ll, [N]one, [r]ename:
# 確認なしで全上書き
unzip -o archive.zip
# 既存ファイルは飛ばす
unzip -n archive.zip
# バッチ処理(CI など)では必ずどちらか指定
unzip -o archive.zip -d /opt/app/
特定ファイルだけ抽出 / 除外
# 特定パターンだけ展開
unzip archive.zip 'docs/*'
unzip archive.zip '*.txt'
# 特定パターンを除外
unzip archive.zip -x '*.exe'
unzip archive.zip -x 'tests/*' '*.log'
# 個別ファイルの中身を標準出力に
unzip -p archive.zip path/to/file.txt
unzip -p archive.zip data.json | jq . # パイプで処理
パスワード付き zip
# パスワード指定(履歴に残る → 注意)
unzip -P SECRETPASSWD archive.zip
# 対話入力(推奨:履歴に残らない)
unzip archive.zip
# → [archive.zip] password:
# 環境変数経由
read -s ZIPPW
unzip -P "$ZIPPW" archive.zip
unset ZIPPW
日本語ファイル名の文字化け
Windows で Shift_JIS / CP932 で固められた zip を Linux で展開すると文字化けします。-O で文字コードを指定します(unzip 6.0+)。
# CP932 で展開
unzip -O cp932 archive.zip
unzip -O sjis archive.zip
# unzip が -O オプションに対応していない場合
# → unar コマンドが便利
sudo apt install unar
unar archive.zip # 自動で文字コード判定
# 7zip 系も使える
7z x archive.zip
tar で zip を解凍する
GNU tar は zip にも対応しています(一部ディストリビューションのみ):
# zip も解凍できる場合
tar xf archive.zip
# 解凍できない場合は bsdtar
sudo apt install libarchive-tools # bsdtar 同梱
bsdtar xf archive.zip
zip 作成側(参考)
# 基本
zip -r archive.zip dir/
# 圧縮率指定(0〜9、9 が最大)
zip -9 -r archive.zip dir/
# パスワード付き
zip -e archive.zip files/ # 対話入力
zip -P SECRET archive.zip files/ # コマンドライン(履歴注意)
# 除外
zip -r archive.zip dir/ -x '*.log' 'dir/tmp/*'
# 既存 zip に追加
zip archive.zip newfile.txt
# 内容を入れ替え
zip -u archive.zip changed.txt
Windows との互換性
| 項目 | 注意 |
|---|---|
| ファイル名 | CP932 ↔ UTF-8 で化けやすい。-O cp932 |
| パス区切り | zip は / 内部使用。Windows の \ は変換される |
| 大文字小文字 | NTFS は区別しないが Linux は区別。重複名で上書き事故 |
| 属性 | UNIX パーミッション(rwxr-xr-x)は通常保持される |
| 暗号化方式 | 古い ZipCrypto は危殆化。AES-256 は unzip 6.x で対応 |
FAQ
Q: zip 作成時に macOS の .DS_Store が混ざる
A: zip -r out.zip dir -x "*.DS_Store" で除外。または find ... -delete で先に消す。
Q: 巨大 zip を分割解凍したい
A: zip 自体に分割機能あり: zip -s 100m archive.zip dir/ → archive.z01, archive.z02 ...。解凍は cat archive.z* > merged.zip; unzip merged.zip or unzip archive.zip。
Q: パスワード付き zip を解析したい
A: fcrackzip / john 等のツールがありますが、自身の所有 zip のみに使用してください。