【Linuxコマンド】zip コマンドの使い方とよく使うオプション

概要

 
zip コマンドは、ファイルやディレクトリを ZIP 形式のアーカイブに圧縮するためのコマンドです。
複数ファイルを 1 つの ZIP ファイルにまとめたり、ディレクトリ配下を再帰的に圧縮したりすることができます。
 

Windows とのやり取りに使いやすい形式であり、ログの受け渡しや配布用パッケージの作成などでよく利用されます。
パスワード付き ZIP を作成することもできますが、方式によっては暗号としては弱い場合があるため、機密性が高いデータには専用の暗号化ツールの利用も検討してください。
 

フォーマット

 

zip [オプション] zipファイル名 入れたいファイルやディレクトリ...
zip [オプション] zipファイル名 -r ディレクトリ名

 

最初の引数に作成する ZIP ファイル名、その後ろに圧縮対象のファイルやディレクトリを指定します。
ディレクトリをまとめて圧縮したい場合は、-r オプションで再帰的に処理します。

すでに同名の ZIP ファイルがある場合は、内容を追加したり更新したりする動作になります(オプションによる)。
完全に作り直したい場合は、一度古い ZIP ファイルを削除してから作り直す方が分かりやすいケースもあります。

 

よく使うコマンド例

 

・単一ファイルを ZIP 圧縮する

zip log.zip app.log

app.loglog.zip という ZIP ファイルに圧縮します。
すでに log.zip がある場合は、そのアーカイブ内に app.log のエントリが追加・更新されます。

 

・複数ファイルを 1 つの ZIP にまとめる

zip config_backup.zip httpd.conf php.ini my.cnf

httpd.confphp.inimy.cnf の 3 ファイルを config_backup.zip にまとめて圧縮します。
設定ファイル一式のバックアップや、サポートへの調査用資料をまとめるときに便利です。

 

・ディレクトリ配下を再帰的に圧縮する(-r)

zip -r site.zip /var/www/example.com

-r(–recurse-paths)は、ディレクトリ配下を再帰的に圧縮します。
この例では、/var/www/example.com 配下のファイルやサブディレクトリをすべて site.zip にまとめます。
Web サイト一式を取得して別環境に渡す場合などに使います。

 

・カレントディレクトリ配下をまとめて ZIP にする(相対パス)

cd /var/www/example.com
zip -r ~/site.zip .

圧縮元のディレクトリへ移動してから . を指定すると、
ZIP 内に余計な絶対パスを含めず、相対パスでまとめることができます。
配布用のアーカイブを作る場合は、この形の方が扱いやすいことが多いです。

 

・圧縮レベルを最大(サイズ重視)にして圧縮する

zip -r -9 logs.zip /var/log/myapp

-0 ~ -9 で圧縮レベルを指定できます(-0 は無圧縮、-9 は最大圧縮)。
容量をなるべく小さくしたい場合は -9、速度を優先したい場合は -1 などを使います。
ただし、極端な圧縮レベルによる差はデータによってはそこまで大きくないこともあります。

 

・特定のパターンのファイルを除外して圧縮する(-x)

zip -r site.zip . -x '*.log' '*.tmp'

-x パターン は、指定したパターンにマッチするファイルを圧縮対象から除外します。
ログファイルや一時ファイルを除外して、ソースコードや設定ファイルだけをまとめたいときに便利です。

 

・特定のパターンのファイルだけを含めて圧縮する(-i)

zip -r src.zip . -i '*.php' '*.html' '*.css'

-i パターン は、指定したパターンにマッチするファイルだけを含めるオプションです。
Web アプリのソースだけ、特定の拡張子だけ、といった選別に利用できます。
-x-i は組み合わせて使うこともできますが、条件が複雑になるので注意が必要です。

 

・パスワード付き ZIP ファイルを作成する(対話モード)

zip -e secret.zip secret.txt

-e(–encrypt)は、対話的にパスワード入力を求めてパスワード付き ZIPを作成します。
ただし、古い ZIP 互換の暗号方式は強度が高くないため、重要な機密情報には別途暗号化を検討してください。

 

・コマンドラインでパスワードを指定する(ログに残るので非推奨)

zip -P password123 secret.zip secret.txt

-P パスワード で、パスワードをコマンドライン上に直接書いて指定することもできます。
ただし、シェルの履歴やプロセス一覧にパスワードが残るため基本的には非推奨です。
可能であれば -e での対話入力や、別の暗号化手段を検討してください。

 

・既存 ZIP の中から特定ファイルだけを更新する(上書き)

zip config_backup.zip httpd.conf

同名の ZIP ファイルに対して同じファイル名で再度 zip コマンドを実行すると、
そのファイルのエントリが更新されます。
簡易的な「設定ファイルの差し替え」として利用することもできますが、
動作を明確にしたい場合は ZIP ファイルを作り直す方が安全な場合もあります。

 




実務でのよくある使いどころ

 

・設定ファイルやスクリプト一式のバックアップ
/etc 配下やアプリケーション設定ファイル、シェルスクリプトなどを
ひとまとめにして ZIP にしておくと、ロールバックや別環境への展開がしやすくなります。
 

・ログ調査用のファイル一式をまとめて収集する
サポートや開発チームに渡すために、/var/log/myapp 配下のログを
zip -r logs.zip /var/log/myapp のようにまとめて取得するケースはよくあります。
 

・Web コンテンツの配布・移行
静的コンテンツや一部の Web アプリケーションを他サーバに移行するときに、
ZIP で一度固めてから SCP や S3 などで転送する、というパターンもよく使われます。
 

・Windows 利用者とのやり取り
Linux 側で生成したログや成果物を、Windows 利用者へ渡す場合、ZIP 形式はもっとも扱いやすい形式のひとつです。
tar.gz も良い選択肢ですが、相手側の環境次第では ZIP の方がそのまま展開されやすいケースもあります。
 

zip コマンドは、シンプルなファイル圧縮だけでなく、再帰的なディレクトリ圧縮パターン指定・除外など、運用で地味に役立つ機能を持っています。
ログや設定ファイルのやり取りが多い環境では、一度手元で試しながらパターン指定に慣れておくと便利です。

 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
-r--recurse-pathsディレクトリを再帰的にたどって配下のファイルやサブディレクトリをまとめて圧縮する
-0圧縮を行わずストアモードで保存する(無圧縮)速度を優先したい場合に使用
-1最速だが圧縮率は低めのモードで圧縮する
-9最も高い圧縮率で圧縮する(処理時間は長くなりやすい)
-x--exclude指定したパターンにマッチするファイルを圧縮対象から除外する(ワイルドカード指定が可能)
-i--include指定したパターンにマッチするファイルのみを圧縮対象として含める(-x と組み合わせて利用可能)
-m--move圧縮後に元のファイルを削除し ZIP 内にのみ残す(移動に近い挙動になるので注意して使用する)
-q--quiet出力メッセージを最小限にし静かに実行する
-v--verbose圧縮中に詳細な情報を表示し処理内容を確認しやすくする
-e--encryptパスワードを対話的に入力してパスワード付き ZIP を作成する
-P--passwordコマンドライン上でパスワード文字列を指定してパスワード付き ZIP を作成する(履歴やプロセス一覧に残るため非推奨)
-F--fix破損した ZIP ファイルや中断された ZIP を修復する処理を試みる
-T--testZIP ファイルを作成後にアーカイブの整合性をテストする
-h--helpzip コマンドの使い方(ヘルプ)を表示して終了する
-vv--versionzip コマンドのバージョン情報を表示して終了する
 

ここでは Linux 環境で一般的に利用される zip コマンドの主なオプションのみを TablePress の表としてまとめている想定です。
実際に使用できるオプションや挙動は、zip のバージョンやディストリビューションによって異なる場合があるため、
本番環境で使用する前に man zip で最新の仕様を確認してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。



人気ブログランキング


ブログランキング・にほんブログ村へ

にほんブログ村