ファイルなどの圧縮形式の一つであるZIP形式は、WindowsやLinuxなどさまざまなプラットフォームで利用されており、最もメジャーな圧縮形式ではないでしょうか。
Linux環境では、ZIP形式で圧縮するときは「zipコマンド」を利用し、解凍するときは「unzipコマンド」を利用します。
そこでここでは、Linux環境でzipコマンドやunzipコマンドを使って、ファイルやディレクトリをZIP圧縮したり、ZIPファイルを展開(解凍)する方法を紹介します。

目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# yum list installed |grep ^zip
zip.x86_64 3.0-11.el7 @base
ZIPファイルを作成する
Linux環境でファイルやディレクトリをZIP圧縮するときは、zipコマンドを利用します。
書式
zip [オプション] ZIPファイル名 圧縮するファイル名
オプション
おもなオプションは、次のとおりです。
オプション | 説明 |
---|---|
-e | 圧縮ファイルにパスワードを付けます。 |
-i | 圧縮対象のファイルを指定します。 |
-r | ディレクトリを再帰的に圧縮します。 |
-u | 圧縮ファイルにファイルを追加します。 |
-x | 圧縮対象から除外するファイルを指定します。 |
-z | アーカイブにコメントを追加します。 |
-@ | 対話的に圧縮するファイルを指定します。 |
zipコマンドの使用例
ファイルを圧縮する
ファイル「file_1.dat」を圧縮して「archive.zip」を作成するには、次のように実行します。
# zip archive file_1.dat
adding: file_1.dat (deflated 100%)
複数のファイルを圧縮するには、次のように実行します。
# zip archive2 file_1.dat file_2.dat
adding: file_1.dat (deflated 100%)
adding: file_2.dat (deflated 100%)
圧縮ファイル名に拡張子を指定せずにコマンドを実行した場合、自動的に拡張子 .zipが付与されます。
ディレクトリを圧縮する
ディレクトリごと圧縮するには、オプション「-r」をつけて実行します。
たとえば、ディレクトリ「folder」を圧縮するには、次のように実行します。
# zip -r archive3 folder
adding: folder/ (stored 0%)
adding: folder/file_3.dat (deflated 100%)
adding: folder/file_4.dat (deflated 100%)
ZIPファイルにファイルを追加する
既存のZIP形式ファイルにファイルを追加するには、オプション「-u」をつけて実行します。
たとえば、ZIP形式ファイル「archive.zip」に、ファイル「file_5.dat」を追加するには、次のように実行します。
# zip -u archive.zip file_5.dat
adding: file_5.dat (deflated 100%)
パスワード付き圧縮ファイルを作成する
パスワード付きの圧縮ファイルを作成するには、オプション「-e」をつけて実行します。
たとえば、ファイル「file_5.dat」をパスワード付きのZIP形式ファイルに圧縮するには、次のように実行し、「Enter password:」でパスワードを設定します。
# zip -e archive_pass.zip file_5.dat
Enter password:
Verify password:
adding: file_5.dat (deflated 100%)
一部のファイルを除いて圧縮する
ワイルドカード「*」を使えば、カレントディレクトリの特定ファイルを圧縮できます。また、オプション「-x」で指定したファイルを圧縮対象から除外することもできます。
たとえば、カレントディレクトリにある「file」から始まるファイルをすべて圧縮するが「file_5.dat」だけ除外する場合は、次のように実行します。
# zip archive4.zip file* -x file_5.dat
adding: file_1.dat (deflated 100%)
adding: file_2.dat (deflated 100%)
特定のファイルのみを圧縮する
上とは逆に、特定のファイルのみを圧縮するには、オプション「-i」をつけて実行します。
たとえば、カレントディレクトリにあるファイルをすべて圧縮するが、対象を「file」から始まるファイルのみとする場合は、次のように実行します。
# zip archive6.zip * -i file*
adding: file_1.dat (deflated 100%)
adding: file_2.dat (deflated 100%)
adding: file_5.dat (deflated 100%)
ZIPファイルを展開(解凍)する
Linux環境でZIPファイルを展開(解凍)するときは、unzipコマンドを利用します。
書式
unzip [オプション] ZIPファイル 対象ファイル
オプション
おもなオプションは、次のとおりです。
オプション | 説明 |
---|---|
-o | ファイルを確認なしに上書きする |
-n | ファイルを上書きしない |
-x | 解凍しないファイルを指定する |
-d | 指定したディレクトリに解凍する |
-j | ディレクトリを作成せずに解凍する |
-p | パイプで受け取ったファイルを解凍する |
-l | ZIPファイルに格納されているファイルを一覧表示する |
-t | ZIPファイルに破損がないかテストする |
-z | ZIPファイルのコメントを表示する |
-v | 動作中のメッセージを詳しくする |
unzipコマンドの使用例
ZIPファイルを解凍する
「file_1.dat」と「file_5.dat」が含まれるZIP形式ファイル「archive.zip」を解凍するには、次のように実行します。(パスワード付きZIPファイルの場合は、解凍時にパスワードを入力するよう促されます。)
# unzip archive.zip
Archive: archive.zip
inflating: file_1.dat
inflating: file_5.dat
解凍先に同名のファイルがある場合は、以下のように、どのように処理するかを選択するプロンプトが表示されます。
replace file_1.dat? [y]es, [n]o, [A]ll, [N]one, [r]ename:
上書きする場合は「y」、解凍しない場合は「n」、全て上書きする場合は大文字で「A」、全て解凍しない場合は大文字で「N」、ファイル名を変更する場合は「r」を入力します。
なお、上記で紹介しているオプションをあらかじめ指定することで、解凍時の動作を決めておくこともできます。
特定のファイルのみ解凍する
unzipコマンドでは、ZIP形式ファイルから特定のファイルのみを解凍することもできます。
たとえば、ZIP形式ファイル「archive.zip」からファイル「file_1.dat」だけを解凍するには、次のように実行します。
# unzip archive.zip file_1.dat
Archive: archive.zip
inflating: file_1.dat
ちなみに、解凍するファイルの指定には「*(アスタリスク)」などのワイルドカードも使用できます。
ZIP形式ファイルの内容を表示する
解凍せずに、ZIP形式ファイルに格納されているファイルを確認するには、オプション「-l」をつけて実行します。
# unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
10485760 11-10-2018 16:22 file_1.dat
10485760 11-10-2018 16:22 file_5.dat
--------- -------
20971520 2 files
あとがき
ZIP形式ファイルを扱うときは、次の点を注意しましょう。
文字化け
異なるプラットフォーム間(WindowsとLinux間など)でZIP形式ファイルをやり取りする場合、ファイル名に日本語が含まれていると文字化けする可能性があります。
暗号アルゴリズム
zipで使用される暗号アルゴリズム(ZipCrypto)は強度が弱く、パスワード付き圧縮ファイルは簡単に解析されてしまうため、重要なデータをパスワード付き圧縮ファイルにする場合は、zipコマンドからの作成はおススメできません。
その場合は、より強度の強い暗号アルゴリズム(AES256など)が利用できる「p7zip」などを利用して作成しましょう。