Linuxコマンド:ファイルやディレクトリを圧縮する(zip)

Linuxコマンド:ファイルやディレクトリを圧縮する(zip)

ファイルなどの圧縮形式の一つであるZIP形式は、WindowsやLinuxなどさまざまなプラットフォームで利用されており、最もメジャーな圧縮形式ではないでしょうか。

Linux環境では、ZIP形式で圧縮するときは「zipコマンド」を利用し、解凍するときは「unzipコマンド」を利用します。

ここでは、Linux環境でZIPコマンドを使ってファイルやディレクトリを圧縮する方法を紹介します。

Linuxコマンド:ZIP形式ファイルを解凍する(unzip)
Linux環境では、ZIP形式ファイルを解凍するときに「unzipコマンド」を利用します。ここでは、unzipコマンドでZIP形式ファイ...
Linuxコマンド:ZIPファイルの中身を確認する(zipinfo)
ここでは、Linux環境でZIPファイルを解凍せずに格納されているファイルの一覧やファイルサイズなどの情報を確認できるzipinfoコマンドの使い方を紹介します。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

# 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 [オプション] ZIPファイル名 圧縮するファイル名

オプション

おもなオプションは、次のとおりです。

オプション説明
-e圧縮ファイルにパスワードを付けます。
-i圧縮対象のファイルを指定します。
-rディレクトリを再帰的に圧縮します。
-u圧縮ファイルにファイルを追加します。
-x圧縮対象から除外するファイルを指定します。
-zアーカイブにコメントを追加します。
-@対話的に圧縮するファイルを指定します。

使用例

ファイルを圧縮する

ファイル「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形式ファイルにファイルを追加するには、オプション「-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形式ファイルを扱うときは、次の点を注意しましょう。

文字化け

異なるプラットフォーム間(WindowsとLinux間など)でZIP形式ファイルをやり取りする場合、ファイル名に日本語が含まれていると文字化けする可能性があります。

暗号アルゴリズム

zipで使用される暗号アルゴリズム(ZipCrypto)は強度が弱く、パスワード付き圧縮ファイルは簡単に解析されてしまうため、重要なデータをパスワード付き圧縮ファイルにする場合は、zipコマンドからの作成はおススメできません。

その場合は、より強度の強い暗号アルゴリズム(AES256など)が利用できる「p7zip」などを利用して作成しましょう。