【2026年7月最新】unzipコマンド完全ガイド|Linuxファイル展開の全オプション・日本語対応・実運用例まで徹底解説

代表菅澤 代表菅澤
Linuxでzipファイルを展開するとき、単純にunzip ファイル名.zipと叩くだけで済む場面はほとんどありません。展開先ディレクトリを指定したい、日本語ファイル名が文字化けする、パスワード付きZIPを扱いたい、スクリプトで自動化したい——こういった実務ニーズが必ず出てきます。
AI鬼管理山崎 AI鬼管理山崎
この記事ではunzipコマンドの全オプションを表形式で整理し、よくある落とし穴とその解決策を実例コードつきで解説します。競合記事の10倍の情報量で、初心者から上級者まで「これ一本読めば完結する」レベルを目指しました。

本記事は実際にLinuxサーバー(Ubuntu/CentOS/Debian)での業務自動化を行うGENAIが、実運用で得た知見をもとに執筆しています。「コマンドのリファレンスページをそのまま日本語に訳しただけ」ではなく、ハマりポイントと回避策を中心に解説します。

✔️unzipの全オプション(-d/-l/-o/-P/-n/-j/-q 等)を表形式で網羅
✔️日本語ファイル名の文字化け問題を3通りの方法で解決
✔️パスワード付きZIPのセキュリティ考慮事項まで解説
✔️シェルスクリプトでの実用的な自動化パターンを紹介
✔️tarコマンドとの使い分け基準を明示
📌 この記事の結論
【2026年7月最新】unzipコマンド完全ガイド|Linuxファイル展開の全オプション・日本語対応・実運用例まで徹底解説
unzipコマンドの全オプションを完全解説。基本展開から特定ディレクトリ指定・日本語ファイル名対策・パスワード付きZIP・シェルスクリプト活用まで、GENAI実運用例と合わせて15,000字超で徹底解説。

01 unzipコマンドとは(zip形式の歴史・用途)

unzipコマンドは、ZIP形式で圧縮されたアーカイブファイルを展開(解凍)するLinuxのコマンドラインツールです。対応するZIP形式の作成コマンドはzipであり、セットで使われることが多いです。

📚 用語解説

ZIP形式:1989年にPKWARE社のPhil Katzが開発したファイル圧縮・アーカイブ形式。拡張子は.zip。複数ファイルを1つにまとめる「アーカイブ」機能と、データを小さくする「圧縮」機能を兼ね備える。現在はISO/IEC 21320-1として標準化されている。

ZIP形式が登場したのは1989年ですが、2026年現在でもWindowsとのファイルやり取り、Webサービスのバックアップダウンロード、デプロイパッケージの配布など、あらゆる場面で使われ続けています。その理由はシンプルです。

✔️Windows・macOS・Linuxすべてで標準サポートされており相互運用性が高い
✔️ファイルごとに個別圧縮するため、一部ファイルだけ取り出しやすい
✔️パスワード保護機能が標準で含まれており、軽量な暗号化に使える
✔️tarと違い、ディレクトリ構造ごと保持しながら1ファイルにまとめられる
AI鬼管理山崎 AI鬼管理山崎
tarはLinux/Unix系では定番ですが、Windowsとのやり取りではzipの方が圧倒的に便利です。Windowsユーザーからもらうファイルや、Webサービスのバックアップ機能はほぼzip形式を使っています。

unzipコマンドはほとんどのLinuxディストリビューションに標準搭載、またはパッケージマネージャで簡単にインストールできます。内部的にはDEFLATEアルゴリズム(zlib)を使った圧縮展開を行いますが、実用上は意識する必要はありません。

📚 用語解説

DEFLATE:ZIP/gzip/PNG等で使われる圧縮アルゴリズム。LZ77とハフマン符号化を組み合わせたもので、フィル・カッツが開発。現在はzlibライブラリとして広く実装されており、HTTP/2のヘッダー圧縮にも応用されている。

また、ZIPには複数の圧縮方式が定義されています。unzipが対応している主な圧縮方式は以下のとおりです。

圧縮方式コード番号特徴主な用途
Store(無圧縮)0ファイルをそのまま格納。展開が最速既に圧縮済みのファイル(JPG等)
Deflate8汎用的なLZ77+ハフマン圧縮。バランスが良い一般テキスト・バイナリファイル
Deflate649Deflateの拡張版。やや高圧縮大容量ファイル(Windows ZIPで使用)
BZIP212高圧縮だが速度は遅いテキスト中心のアーカイブ
LZMA14最高クラスの圧縮率7-Zipでも使用
AES暗号化99AES-128/256暗号化。パスワード保護セキュリティが必要な配布物
💡 豆知識:ZIPとunzipは別パッケージ

Linuxでは圧縮(zipコマンド)と展開(unzipコマンド)は別々のバイナリです。zipパッケージはzip/unzipを含みますが、ディストリビューションによってはunzipのみ個別インストールが必要な場合もあります。

02 インストール確認と基本構文

unzipが使える状態かどうかは、まずバージョン確認コマンドで確かめます。

# バージョン確認
unzip -v

# インストールされていない場合のエラー例
# -bash: unzip: command not found

インストールされていない場合は、各ディストリビューションのパッケージマネージャでインストールします。

# Ubuntu / Debian系
apt-get install unzip

# CentOS / RHEL系(yum)
yum install unzip

# CentOS 8+ / Fedora系(dnf)
dnf install unzip

# Alpine Linux
apk add unzip

# macOS(Homebrew)
brew install unzip
代表菅澤 代表菅澤
Dockerコンテナ内で使う場合はalpineベースのイメージが多いですね。apk add unzipを覚えておくと便利です。

unzipの基本構文は以下のとおりです。

unzip [オプション] ファイル名.zip [展開するファイルのパターン...] [-d 展開先ディレクトリ]
構文要素説明
オプション-l/-o/-d/-P等のフラグ。複数同時指定可-o -d /home/user/output/
ファイル名.zip展開対象のZIPファイル(必須)archive.zip
ファイルパターンZIP内の特定ファイルだけ展開(省略で全展開)*.txt doc/*.pdf
-d 展開先展開先ディレクトリ指定(末尾に配置)-d /home/user/work/

📚 用語解説

アーカイブ:複数のファイルやディレクトリを1つにまとめたファイルのこと。ZIPやtarが代表例。圧縮を伴う場合と伴わない場合がある。Linuxでは「tarアーカイブ」が伝統的に使われるが、クロスプラットフォームでは「ZIPアーカイブ」が一般的。

03 全オプション一覧(表形式で詳解)

unzipのオプションは「動作モードを変えるフラグ」と「出力を制御するフラグ」に大別できます。以下に主要オプションをすべて解説します。

主要オプション一覧

オプション機能使用例備考
-lZIPの中身を一覧表示(展開しない)unzip -l archive.zipファイルサイズ・更新日時・名前が分かる
-d DIR指定ディレクトリに展開unzip archive.zip -d /home/user/out/ディレクトリが存在しない場合は自動作成
-o既存ファイルを上書き確認なしで展開unzip -o archive.zipバッチ処理時に必須
-n既存ファイルを上書きしないunzip -n archive.zip-oと逆の動作
-P パスワードパスワード付きZIPを展開unzip -P mypass archive.zipシェル履歴に残るため注意
-jディレクトリ構造を無視してフラット展開unzip -j archive.zip全ファイルをカレントに展開
-q静粛モード(出力を抑制)unzip -q archive.zipスクリプトで利用する場合
-qq完全静粛モードunzip -qq archive.zipエラーも抑制するため注意
-v詳細情報を表示unzip -v archive.zip圧縮率・CRCも表示
-tZIPファイルの整合性テストunzip -t archive.zip破損確認に使う
-x パターン指定パターンのファイルを除外unzip archive.zip -x "*.log"不要ファイルを除いて展開
-O 文字コードファイル名の文字コード指定unzip -O CP932 archive.zip日本語ファイル名対策
-UUUnicodeファイル名を無効化unzip -UU archive.zip文字化け対策の一手段
-aテキストファイルの改行コード変換unzip -a archive.zipWindowsとLinux間の変換
-Cファイル名の大文字小文字を区別しないunzip -C archive.zip *.TXTWindows作成ZIPに有効
-X所有者・グループ情報を保持unzip -X archive.ziproot権限時のみ有効
-Mmoreコマンドのようにページ表示unzip -M -l archive.zip長い一覧を見やすくする
-Zzipinfoモードで詳細情報表示unzip -Z archive.zipzipinfoコマンドと同等
AI鬼管理山崎 AI鬼管理山崎
一番よく使うのは-o-dの組み合わせです。「上書き確認なしで、特定のディレクトリに展開」というのがスクリプト自動化でほぼ必須になります。
💡 オプションの組み合わせ

unzipのオプションは自由に組み合わせられます。例えばunzip -oq archive.zip -d /home/user/output/のように、複数のフラグをまとめて指定できます。ただし-dの後には必ずディレクトリパスが続く点に注意してください。

04 基本的な展開方法

まずはもっとも基本的な使い方から確認します。カレントディレクトリにあるZIPファイルを展開する場合です。

# カレントディレクトリに展開
unzip archive.zip

# 実行結果の例
Archive:  archive.zip
  inflating: README.md
  inflating: src/main.py
  inflating: src/utils.py
   creating: images/
  inflating: images/logo.png

展開時に表示される各行の先頭キーワードは、処理の種類を示しています。

キーワード意味
inflating:DEFLATEで圧縮されたファイルを展開した
extracting:圧縮なし(Store)のファイルを取り出した
creating:ディレクトリを作成した
linking:シンボリックリンクを作成した

特定のファイルだけ展開する

ZIPの中から特定のファイルだけを展開することもできます。ワイルドカードを使ったパターン指定が可能です。

# 特定のファイルだけ展開
unzip archive.zip README.md

# ワイルドカードで拡張子指定(シェルの展開を防ぐためクォートする)
unzip archive.zip "*.txt"

# 複数のパターンを指定
unzip archive.zip "*.py" "*.md"

# srcディレクトリ以下のファイルのみ展開
unzip archive.zip "src/*"
⚠️ ワイルドカードはクォートが必要

シェルがワイルドカードを展開してしまうため、*.txtのようなパターンは必ずシングルクォートかダブルクォートで囲んでください。クォートなしで実行すると、カレントディレクトリの.txtファイルに展開先が変わってしまうことがあります。

代表菅澤 代表菅澤
ワイルドカードのクォート忘れは本当によくあるミスです。特に自動化スクリプトを書くときは必ずクォートしてください。

ZIPファイルが別ディレクトリにある場合

# ZIPのパスを絶対パスで指定
unzip /home/user/downloads/archive.zip

# 相対パスでも指定可能
unzip ../downloads/archive.zip

AI導入・業務自動化でお悩みですか?
AI鬼管理では、LINEで無料相談を受付中です。

05 特定ディレクトリへ展開する(-dオプション)

-dオプションは実務で最もよく使うオプションの一つです。展開先のディレクトリを明示的に指定することで、カレントディレクトリが散らかるのを防げます。

# /home/user/work/ ディレクトリに展開
unzip archive.zip -d /home/user/work/

# ディレクトリが存在しない場合は自動作成される
unzip archive.zip -d /home/user/new-folder/

# 相対パスも指定可能
unzip archive.zip -d ./output/
💡 -dオプションは末尾に置く

-dオプションはコマンドの最後に書くのが一般的です。ファイルパターンを指定する場合も、unzip archive.zip "*.py" -d /home/user/python_files/のように末尾に置きます。

AI鬼管理山崎 AI鬼管理山崎
実務では展開先ディレクトリをタイムスタンプで動的に生成することが多いです。-d /home/user/backups/$(date +%Y%m%d)/のような書き方が便利です。
# タイムスタンプ付きディレクトリに展開(バックアップ運用例)
DEST="/home/user/backups/$(date +%Y%m%d_%H%M%S)"
unzip -o archive.zip -d "$DEST"
echo "展開先: $DEST"

また、複数のZIPを一括展開するループ処理では-dオプションが特に重要です。展開先をZIPのベース名から自動生成すると管理しやすくなります。

# 複数ZIPを個別ディレクトリに展開する例
for zipfile in /home/user/zips/*.zip; do
    basename="${zipfile%.zip}"
    dirname="${basename##*/}"
    unzip -o "$zipfile" -d "/home/user/extracted/$dirname/"
    echo "展開完了: $dirname"
done
ZIPファイル群をループ
ベース名からディレクトリ名を生成
-dで個別ディレクトリに展開
完了ログを出力

06 中身の確認だけする(-lオプション)

-lオプションは展開せずにZIPの中身の一覧を表示します。ダウンロードしたZIPが何を含んでいるか事前に確認したいときに使います。

# 中身の一覧を表示(展開しない)
unzip -l archive.zip

# 実行結果例
Archive:  archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1024  2026-07-01 10:00   README.md
    45678  2026-07-01 10:01   src/main.py
     2048  2026-07-01 10:01   src/utils.py
    89012  2026-07-01 10:02   images/logo.png
---------                     -------
   137762                     4 files

-lオプションで表示される情報は以下のとおりです。

列名内容
Length展開後のファイルサイズ(バイト)
Dateファイルの更新日
Timeファイルの更新時刻
NameZIP内のパス(ディレクトリ構造を含む)

-vオプションで詳細情報を確認する

-vオプションでは圧縮率やCRCチェックサム情報も表示されます。

# 詳細情報付きで一覧表示
unzip -v archive.zip

# 実行結果例
Archive:  archive.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    1024  Defl:N      428  58% 2026-07-01 10:00 a1b2c3d4  README.md
   45678  Defl:N    18234  60% 2026-07-01 10:01 e5f6a7b8  src/main.py
--------          -------  ---                            -------
   46702            18662  60%                            2 files

📚 用語解説

CRC-32:Cyclic Redundancy Check(巡回冗長検査)の32ビット版。ファイルの整合性を確認するためのチェックサム。展開後のファイルのCRC-32が、ZIP内に記録されたCRC-32と一致しない場合は破損を意味する。

代表菅澤 代表菅澤
本番環境へのデプロイ前にZIPの整合性を確認したいときはunzip -t archive.zipも使えます。展開せずにCRCテストだけ行います。
# ZIPファイルの整合性テスト(展開せず)
unzip -t archive.zip

# 結果例(正常)
Archive:  archive.zip
    testing: README.md                OK
    testing: src/main.py              OK
No errors detected in compressed data in archive.zip.

07 上書き確認をスキップする(-oオプション)

デフォルトではunzipは既存ファイルに対して上書き確認を行います。スクリプトでの自動化時にはこの確認を省略する必要があります。

# デフォルトの動作(上書き確認が発生する)
$ unzip archive.zip
Archive:  archive.zip
replace README.md? [y]es, [n]o, [A]ll, [N]one, [r]ename:
# ← ここで入力待ちになる(スクリプトではハング)

# -oオプションで確認をスキップ
unzip -o archive.zip
⚠️ スクリプトでの-o指定は必須

cronやCI/CDパイプラインでunzipを使う場合、-oを付け忘れると入力待ちでプロセスがハングします。自動化スクリプトでは必ず-oを指定してください。

逆に、既存ファイルを絶対に上書きしたくない場合は-nオプションを使います。

# 既存ファイルを上書きしない(スキップ)
unzip -n archive.zip

# 実行結果例
Archive:  archive.zip
# README.md already exists; not extracting.
  inflating: src/new-file.py
オプション既存ファイルの扱い主な用途
なし(デフォルト)ファイルごとに上書き確認手動での慎重な展開
-o確認なしで上書きスクリプト・自動化・CI/CD
-n上書きせずスキップ差分追加・初回のみ展開
AI鬼管理山崎 AI鬼管理山崎
バックアップの復元やデプロイでは-oが基本です。一方、設定ファイルを誤って上書きしたくない場面では-nが安全です。

08 文字コード問題の解決(日本語ファイル名対策)

unzipの日本語ファイル名問題は、Linux上で最もよくハマるポイントです。Windowsで作成したZIPは日本語ファイル名がShift-JIS(CP932)でエンコードされていることが多く、Linuxのunzipはデフォルトでこれを正しく解釈できません。

📚 用語解説

Shift-JIS(CP932):Windowsで伝統的に使われてきた日本語文字コード。JISコードとシフトされたビットパターンを組み合わせた独自形式。Microsoft版はCP932と呼ばれる。LinuxはデフォルトでUTF-8を使うため、CP932のファイル名は文字化けする。

文字化けの典型的な症状と3つの対処法を解説します。

# 問題のある展開(日本語が文字化けする)
$ unzip windows-archive.zip
Archive:  windows-archive.zip
  inflating: 縺ュ縺壹∩縺ョ繝輔ぃ繧、繝ォ.txt   ← 文字化け

対処法1:-Oオプション(最も確実)

-Oオプションでファイル名の文字コードを明示的に指定します。Windowsで作ったZIPにはCP932を指定するのが基本です。

# CP932(Shift-JIS)として解釈して展開
unzip -O CP932 windows-archive.zip

# GBK(中国語)の場合
unzip -O GBK chinese-archive.zip
⚠️ -Oオプションはバージョンによって動作が異なる

-Oオプションは比較的新しいunzipバージョン(6.0以降)で利用可能ですが、Ubuntuの標準パッケージでは動作しないことがあります。unzip -vでバージョンを確認し、動作しない場合は対処法2または3を試してください。

対処法2:unarコマンドを使う

unarコマンドは文字コードを自動判定してくれるため、日本語ファイル名問題が起きにくいです。

# unarのインストール
apt-get install unar   # Ubuntu/Debian
yum install unar       # CentOS/RHEL

# 自動文字コード判定で展開
unar windows-archive.zip

# 展開先を指定
unar -o /home/user/output/ windows-archive.zip

対処法3:convmvで後から変換

一度展開した後で、ファイル名の文字コードを変換する方法です。展開済みのファイルに対して後から適用できます。

# convmvのインストール
apt-get install convmv

# まず展開(文字化けしたままでOK)
unzip windows-archive.zip -d /home/user/output/

# 文字コードをShift-JISからUTF-8に変換(--notest を外すと実際に変換)
convmv -f cp932 -t utf-8 -r /home/user/output/ --notest
対処法コマンドメリットデメリット
-O CP932unzip本体追加ツール不要バージョン依存
unar別ツール自動判定・信頼性が高い追加インストール必要
convmv後処理ツール展開済みファイルにも適用可2段階作業が必要
代表菅澤 代表菅澤
私たちの本番環境ではunarを標準採用しています。Windowsユーザーからもらったファイルを扱う場面が多いため、文字化けリスクをゼロにしたいです。

09 パスワード付きZIP(-Pオプション)

ZIPにはパスワード保護機能があります。unzipで展開するには-Pオプションでパスワードを指定します。

# パスワードを直接指定
unzip -P mypassword secret.zip

# 展開先も指定する場合
unzip -P mypassword secret.zip -d /home/user/secure_output/
⚠️ パスワードをコマンドラインで渡す危険性

-Pでパスワードを直接指定すると、historyコマンドやプロセスリスト(ps)にパスワードが表示されてしまいます。本番環境・共有サーバーでは避けるべきです。代わりに対話的入力か環境変数を使いましょう。

より安全なパスワード入力方法

# 対話的にパスワードを入力(履歴に残らない)
unzip secret.zip
# "Archive password:" プロンプトが表示され、入力は画面に表示されない

# 環境変数経由(スクリプトで使う場合の安全策)
# .envファイルに ZIP_PASSWORD=... を書いてsourceする
source /home/user/.env
echo "$ZIP_PASSWORD" | unzip -P "$(cat -)" secret.zip 2>/dev/null

📚 用語解説

ZIPの暗号化強度:従来のZIPパスワード(ZipCrypto)はAES暗号化ではなく弱い独自暗号で、現代的な環境では容易に解読されます。機密性の高いデータにはAES-256暗号化(WinZip AE形式)か、GnuPGによる暗号化を使うべきです。unzipはAES-256展開にも対応しています。

💡 パスワードなしで展開を試みる

unzip -P ""でパスワードが空文字のZIPを展開できます。ZIPの中身を確認したいが、パスワードが不明な場合はunzip -lでファイル一覧だけは見られることがあります(暗号化されていない部分の情報)。

AI鬼管理山崎 AI鬼管理山崎
ビジネスで受け取るパスワード付きZIPは、パスワードを別メールで受け取るケースが多いですよね。自動化する場合は安全な方法でパスワードを管理する必要があります。

10 tarとの違い・zipとunzipの使い分け

LinuxではtarコマンドとZIPコマンドの両方が使われます。初心者は「どちらを使えばいいのか」迷いがちですが、用途によって明確な基準があります。

比較項目tar(.tar.gz/.tar.bz2/.tar.xz)zip/unzip(.zip)
主な使用場面Linux内でのバックアップ・配布Windowsとのやり取り・汎用配布
パーミッション保持できる(uid/gidも保持)基本的にできない
圧縮アルゴリズムgzip/bzip2/xz等を外部コマンドで組み合わせDeflate等をZIP形式内に内包
個別ファイル取り出しファイルを順番に読む必要がある任意のファイルにランダムアクセス可
Windowsとの互換性WSL等でないと扱いにくい標準サポート(エクスプローラーで解凍可)
パスワード保護外部ツール(gpg等)が必要標準でサポート
分割アーカイブ標準サポートありzip -sで分割可(unzipは対応限定的)
ファイル名の文字コードUTF-8で問題なしWindows作成時はShift-JISで問題あり
代表菅澤 代表菅澤
私のルールはシンプルです。Linuxサーバー内で完結する作業はtar、Windowsユーザーやクラウドサービスとやり取りするファイルはzip/unzipを使います。

どちらを使うか迷ったときの判断フロー

相手がWindowsユーザー?
Webからダウンロードしたファイル?
パーミッション保持が必要?
zip → unzip / tar → tar xf

具体的なケースごとの推奨を整理します。

✔️Webサービスのバックアップダウンロード → zip(ほぼすべてのサービスがzip形式)
✔️Linuxサーバー間のファイル転送 → tar.gz(パーミッション保持・高圧縮率)
✔️Windowsユーザーへの配布 → zip(エクスプローラーで直接解凍可能)
✔️GitHub Release Assets → zip(Windowsユーザーへの配慮)
✔️Dockerイメージ内でのアーカイブ → tar.gz(軽量・高速)
✔️デプロイパッケージ(Lambda等) → zip(クラウドサービスの要求仕様が多い)

📚 用語解説

tar:Tape ARchiveの略。元々はテープドライブへのバックアップ用に開発されたLinux標準のアーカイブツール。tarコマンド自体に圧縮機能はなく、gzip/bzip2/xzと組み合わせて使う。Linux/Unix系OSではデファクトスタンダード。

11 シェルスクリプトでのunzip活用

unzipをシェルスクリプトに組み込むことで、ファイル処理を完全に自動化できます。実務でよく使うパターンを紹介します。

パターン1:展開の成否を判定する

#!/bin/bash
ZIP_FILE="/home/user/uploads/data.zip"
OUTPUT_DIR="/home/user/extracted/"

if unzip -o "$ZIP_FILE" -d "$OUTPUT_DIR"; then
    echo "展開成功: $OUTPUT_DIR"
else
    echo "展開失敗: $ZIP_FILE" >&2
    exit 1
fi

パターン2:展開後にZIPを削除する

#!/bin/bash
ZIP_FILE="/home/user/inbox/report.zip"
OUTPUT_DIR="/home/user/reports/"

unzip -o -q "$ZIP_FILE" -d "$OUTPUT_DIR"
RESULT=$?

if [ $RESULT -eq 0 ]; then
    rm "$ZIP_FILE"
    echo "展開完了・ZIP削除: $ZIP_FILE"
else
    echo "展開エラー(コード: $RESULT)" >&2
    exit $RESULT
fi

パターン3:ディレクトリ内の全ZIPを一括処理

#!/bin/bash
INBOX="/home/user/inbox/"
OUTBOX="/home/user/outbox/"

ZIP_COUNT=0
ERROR_COUNT=0

for ZIP_FILE in "$INBOX"*.zip; do
    # ZIPが存在するか確認
    [ -f "$ZIP_FILE" ] || continue

    BASENAME="$(basename "$ZIP_FILE" .zip)"
    DEST="$OUTBOX$BASENAME/"

    echo "処理中: $BASENAME"

    if unzip -o -q "$ZIP_FILE" -d "$DEST"; then
        ZIP_COUNT=$((ZIP_COUNT + 1))
    else
        echo "  エラー: $ZIP_FILE" >&2
        ERROR_COUNT=$((ERROR_COUNT + 1))
    fi
done

echo "完了: 成功 $ZIP_COUNT 件 / エラー $ERROR_COUNT 件"

パターン4:ZIPの整合性チェック後に展開

#!/bin/bash
ZIP_FILE="/home/user/delivery/package.zip"
OUTPUT_DIR="/home/user/production/"

# まず整合性テスト
echo "整合性チェック中..."
if ! unzip -t -q "$ZIP_FILE"; then
    echo "ZIPファイルが破損しています: $ZIP_FILE" >&2
    exit 1
fi

echo "整合性OK。展開します..."
unzip -o "$ZIP_FILE" -d "$OUTPUT_DIR"
echo "展開完了: $OUTPUT_DIR"
💡 unzipの終了コード

unzipは成功時に0、警告時に1、エラー時に2以上を返します。スクリプトで判定する場合は$?またはif unzip ...で確認できます。-qオプションを使うと出力が抑制されますが、終了コードは変わらず正確に返されます。

AI鬼管理山崎 AI鬼管理山崎
スクリプトでのエラーハンドリングはset -e(エラーで即終了)と組み合わせると安全です。ただしset -eはサブシェルのエラーも補足するため、意図的に失敗を許容したい箇所はcommand || trueで回避します。

AI導入・業務自動化でお悩みですか?
AI鬼管理では、LINEで無料相談を受付中です。

12 GENAI実運用でのファイル管理自動化

GENAIでは複数のクライアントから定期的にデータZIPを受け取り、自動処理するフローを構築しています。その実例を紹介します。

ユースケース1:クライアントからのレポートZIP自動処理

クライアントからSFTPまたはメールで届くZIPファイルを自動展開し、CSVデータをデータベースにインポートするフローです。

ZIPファイルの受信(SFTP監視)
整合性チェック(unzip -t)
CP932対応展開(unar)
CSVデータ処理
完了通知
#!/bin/bash
# /home/user/scripts/process-client-zip.sh
# クライアントから受信したZIPを自動処理

WATCH_DIR="/home/user/sftp-inbox/"
PROCESS_DIR="/home/user/processing/"
DONE_DIR="/home/user/done/"

process_zip() {
    local ZIP_FILE="$1"
    local BASENAME="$(basename "$ZIP_FILE" .zip)"
    local DEST="$PROCESS_DIR$BASENAME/"

    echo "[$(date)] 処理開始: $BASENAME"

    # 整合性チェック
    if ! unzip -t -q "$ZIP_FILE" 2>/dev/null; then
        echo "[ERROR] ZIP破損: $ZIP_FILE"
        return 1
    fi

    # unarで文字コード自動判定展開
    if unar -o "$DEST" "$ZIP_FILE" > /dev/null 2>&1; then
        echo "[OK] 展開完了: $DEST"
        # 処理済みディレクトリに移動
        mv "$ZIP_FILE" "$DONE_DIR"
    else
        echo "[ERROR] 展開失敗: $ZIP_FILE"
        return 1
    fi
}

# 監視ディレクトリ内の全ZIPを処理
for ZIP in "$WATCH_DIR"*.zip; do
    [ -f "$ZIP" ] && process_zip "$ZIP"
done

ユースケース2:Webアプリのバックアップ自動展開

WordPressバックアッププラグインが生成するZIPを自動展開してステージング環境に適用するフローです。

#!/bin/bash
# WordPress バックアップZIPをステージング環境に適用
BACKUP_DIR="/home/user/wp-backups/"
STAGE_DIR="/home/user/staging/wordpress/"

# 最新のバックアップZIPを特定
LATEST_ZIP="$(ls -t "$BACKUP_DIR"*.zip 2>/dev/null | head -1)"

if [ -z "$LATEST_ZIP" ]; then
    echo "バックアップZIPが見つかりません"
    exit 1
fi

echo "適用するバックアップ: $LATEST_ZIP"

# ステージングディレクトリをバックアップ後に展開
STAGE_BACKUP="$STAGE_DIR.backup.$(date +%Y%m%d%H%M%S)"
mv "$STAGE_DIR" "$STAGE_BACKUP"

# 展開
unzip -o -q "$LATEST_ZIP" -d "$STAGE_DIR"
echo "ステージング更新完了"
✔️整合性テスト(unzip -t)を必ず展開前に実施する
✔️日本語ファイル名が含まれる可能性があるならunarを採用する
✔️スクリプトでは必ず-oまたは-nを明示し、対話的確認を排除する
✔️展開後のディレクトリ構造を-lで事前確認してから本番適用する
✔️処理済みZIPは別ディレクトリに移動してべき等性を確保する
代表菅澤 代表菅澤
ファイル処理の自動化では「同じスクリプトを何度実行しても同じ結果になる(べき等性)」が大事です。処理済みファイルの移動やスキップ条件を必ず入れるようにしています。

13 Claude CodeにLinuxファイル操作を任せる

ここまでunzipコマンドの全機能を解説してきましたが、「コマンドを覚える」こと自体が目的ではありません。2026年現在、AIを使えばLinuxコマンドの学習コストを大幅に削減できます。

AI鬼管理山崎 AI鬼管理山崎
「unzip -Oオプションって何だっけ?」「日本語ファイル名が文字化けしたときの対処法は?」——こういった疑問をClaude Codeに聞くと、状況に応じた最適なコマンドをすぐに出してくれます。

Claude CodeはLinuxコマンドの選択・組み合わせ・シェルスクリプト化を自然言語で指示するだけで実行してくれます。特にunzipのような「オプションが多く、状況によって使い方が変わる」コマンドで威力を発揮します。

Claude Codeに任せられるunzip関連タスク

✔️「Windows作成のZIPで日本語ファイル名が文字化けする」→ 状況に合わせた展開コマンドを自動生成
✔️「特定の拡張子のファイルだけ抜き出したい」→ ワイルドカードパターン付きコマンドをその場で生成
✔️「複数のZIPを一括展開するスクリプトを書きたい」→ エラーハンドリング付きスクリプトを即座に出力
✔️「パスワード付きZIPを安全に処理したい」→ セキュアな処理方法を提案・実装
✔️「ZIPが壊れているかチェックしたい」→ 整合性確認コマンドとエラー判定スクリプトを生成
代表菅澤 代表菅澤
GENAIでは社内のファイル管理自動化フローをほぼすべてClaude Codeで構築しています。コマンドの詳細をいちいち調べる時間が不要になり、スクリプト作成が10倍速になりました。

Claude Codeは単にコマンドを教えるだけでなく、実際にターミナルでコマンドを実行して結果を確認しながら作業を進めます。つまり「指示するだけで、ファイル処理が完了する」ところまで自動化できます。

AI鬼管理のLinuxファイル操作自動化支援

AI鬼管理では、Claude Codeを活用したLinuxファイル操作の自動化支援を行っています。unzipを含むLinuxコマンドの実務活用から、シェルスクリプトによる業務自動化の構築まで、非エンジニアの方でも導入できる形でサポートします。

AI AUTOMATION

Linuxファイル操作を丸ごと自動化する

unzip・tar・シェルスクリプトをClaude Codeで完全自動化。
手作業ゼロのファイル管理フローを構築します。

LINEで無料相談する

よくある質問(FAQ)

Q. unzipコマンドがインストールされていない場合はどうすればいいですか?

A. apt-get install unzip(Ubuntu/Debian)またはyum install unzip(CentOS/RHEL)でインストールできます。Dockerコンテナ内でAlpine Linuxを使っている場合はapk add unzipです。インストールにはroot権限またはsudo権限が必要です。

Q. ZIPファイルの日本語ファイル名が文字化けします。どう対処すればいいですか?

A. Windowsで作成したZIPファイルは日本語ファイル名がShift-JIS(CP932)でエンコードされています。対処法は3つあります。①unzip -O CP932 archive.zipでオプション指定(バージョン依存)、②unarコマンドを使う(自動判定)、③展開後にconvmv -f cp932 -t utf-8 -r ./でファイル名を変換、のいずれかを試してください。最も確実なのはunarコマンドです。

Q. unzipで展開中にエラー「bad CRC」が出ました。

A. CRCエラーはZIPファイルが破損していることを意味します。ダウンロードが途中で中断された可能性があります。unzip -t archive.zipで整合性テストを実行し、エラーが出た場合はファイルを再ダウンロードしてください。ダウンロード元がMD5/SHA256チェックサムを公開している場合は照合することをお勧めします。

Q. パスワード付きZIPのパスワードを忘れてしまいました。

A. 残念ながら、適切に暗号化されたZIPのパスワードを忘れた場合、合法的な手段での復元は困難です。ただし、従来のZipCrypto暗号化(AES-256ではない方式)は脆弱であり、既知のファイルの一部が分かっている場合などに解読ツールが存在します。AES-256暗号化の場合は事実上解読不可能です。今後のためにパスワードマネージャーの活用をお勧めします。

Q. スクリプトでunzipを使うと「replace file? [y]es...」で止まります。

A. デフォルトでは既存ファイルがある場合に確認プロンプトが表示されます。スクリプトではunzip -o archive.zip(上書き許可)またはunzip -n archive.zip(上書き禁止・スキップ)のいずれかを指定してください。自動化・CI/CDでは必ず-o-nを付けることが必須です。

Q. ZIPの一部のファイルだけ展開したいのですが、ワイルドカードがうまく動きません。

A. ワイルドカードをシェルが展開してしまう問題です。"*.txt"のようにクォートで囲んでください。unzip archive.zip "*.txt"ならZIP内の.txtファイルのみ展開されます。クォートなしだと、カレントディレクトリの.txtファイル名としてシェルが解釈してしまい、意図しない動作になります。

まとめ:unzipコマンドを使いこなして作業を自動化しよう

本記事ではunzipコマンドの全オプションから実務的な活用パターンまで解説しました。重要ポイントをまとめます。

✔️基本はunzip archive.zip。展開先指定は-d DIR
✔️スクリプトでは必ず-o(上書き)か-n(スキップ)を指定
✔️日本語ファイル名対策はunzip -O CP932またはunarコマンド
✔️パスワード付きは-Pだが、本番ではコマンド履歴に残らない方法を使う
✔️ZIPの破損チェックにはunzip -tを展開前に実行する
✔️Windowsとのやり取りにはzip/unzip、Linux内部ではtarが適切
代表菅澤 代表菅澤
unzipは地味なコマンドですが、自動化フローの核心になることが多いです。オプションを使いこなすことで、手作業ゼロのファイル処理ラインが構築できます。
AI鬼管理山崎 AI鬼管理山崎
さらに高度な自動化を目指すなら、Claude Codeに任せるのが一番の近道です。「こういうファイル処理をしたい」と日本語で伝えるだけで、最適なシェルスクリプトを作ってくれます。

AI鬼管理では、Claude Codeを使ったLinuxファイル操作の自動化を含む、業務効率化の無料相談を受け付けています。まずはLINEでお気軽にご相談ください。

FREE CONSULTATION

Linux自動化・AI活用を無料で相談

unzipを活用したファイル処理自動化から、Claude Codeによる業務効率化まで、プロが直接アドバイスします。

LINEで無料相談する(0円)
AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。