はじめに

こんにちは!今回はzipコマンドについて解説します。

zipは、ファイルやディレクトリを圧縮してZIPファイルを作成するコマンドです。Windowsと互換性が高い圧縮形式なので、クロスプラットフォームでのファイル共有に最適。複数ファイルをまとめたり、メールで送るときに毎日使うコマンドですね。

「複数ファイルを1つの箱に詰める機」って感じです。

zipコマンドとは

zipは、ファイルやディレクトリを圧縮してZIPアーカイブを作成するコマンドです。“unzip"の逆で、ファイルを圧縮して保存します。

ZIP形式は、Windows・Mac・Linux・スマートフォンなど、あらゆるプラットフォームで標準的に対応しているから、ファイル交換に最適。複数ファイルを1つにまとめたり、ファイルを小さくしたり、パスワード保護したりできます。ビジネスシーンで最も一般的な圧縮形式ですね。

基本構文

1
zip [オプション] zipファイル 圧縮対象

圧縮対象にはファイルやディレクトリを指定できます。

主なオプション

オプション 説明
-r ディレクトリを再帰的に圧縮
-e パスワード保護を有効化
-q 出力を抑制(quiet)
-v 詳細表示
-j ディレクトリ構造を無視してファイルのみ圧縮
-l LF(Unix)を CRLF(Windows)に変換
-d ファイルを削除
-u 更新된 ファイルのみ追加
-x 特定ファイルを除外
-m 圧縮後に元ファイルを削除

使用例

例1: 単一ファイルを圧縮

1
zip archive.zip file.txt

実行結果:

1
  adding: file.txt (stored 0%)

file.txtarchive.zipに圧縮。シンプルな1ファイル圧縮。

例2: 複数ファイルを一度に圧縮

1
zip archive.zip file1.txt file2.txt file3.txt

実行結果:

1
2
3
  adding: file1.txt (stored 0%)
  adding: file2.txt (stored 0%)
  adding: file3.txt (stored 0%)

複数ファイルを1つのZIPファイルに圧縮。

例3: ディレクトリを再帰的に圧縮

1
zip -r archive.zip folder/

実行結果:

1
2
3
4
  adding: folder/ (stored 0%)
  adding: folder/file1.txt (stored 0%)
  adding: folder/subfolder/ (stored 0%)
  adding: folder/subfolder/file2.txt (deflated 50%)

-rオプションでディレクトリ全体を再帰的に圧縮。フォルダ構造が保持されます。

例4: パスワード保護を追加

1
zip -e secure.zip confidential.txt

実行結果:

1
2
3
Enter password:
Verify password:
  adding: confidential.txt (deflated 25%)

-eでパスワード保護。対話的にパスワード入力。解凍時にパスワードが必要。

例5: ディレクトリ構造を無視して圧縮

1
zip -j flat.zip folder/file1.txt folder/subfolder/file2.txt

実行結果:

1
2
  adding: file1.txt (stored 0%)
  adding: file2.txt (deflated 30%)

-jで、ZIPファイル内のディレクトリ構造を無視。すべてのファイルがルートに格納。

例6: 特定ファイルを除外して圧縮

1
zip -r archive.zip folder/ -x "*.log" "*/cache/*"

実行結果:

1
2
3
  adding: folder/ (stored 0%)
  adding: folder/file.txt (stored 0%)
  (*.log と */cache/ 内のファイルはスキップ)

-xで特定パターンのファイルを除外。ログファイルやキャッシュを除外。

例7: 圧縮後に元ファイルを削除

1
zip -m archive.zip document.txt

実行結果:

1
  adding: document.txt (deflated 40%)

-mで圧縮後に元のdocument.txtを削除。ディスク容量を節約。

例8: ZIPファイルに追加圧縮

1
zip archive.zip new_file.txt

実行結果:

1
  adding: new_file.txt (stored 0%)

既存のZIPファイルに新しいファイルを追加。

例9: 更新されたファイルのみ追加

1
zip -u archive.zip *.txt

実行結果:

1
2
  updating: file1.txt (deflated 35%)
  (file2.txt は変更なし、スキップ)

-uで更新されたファイルのけみ追加。差分更新が可能。

例10: 出力を抑制して圧縮

1
zip -q archive.zip folder/

実行結果:

1
(何も表示されない)

-qで出力を抑制。スクリプトでの自動化に向いています。

Tips・注意点

zipコマンドがない場合

1
2
3
4
which zip
# zip: command not found の場合
apt-get install zip  # Debian/Ubuntu
yum install zip      # CentOS/RHEL

古いシステムではzipコマンドがインストールされていない場合があります。

パスワード保護は対話的

1
2
zip -e archive.zip file.txt
# ターミナルでパスワード入力が必要

スクリプトから実行する場合は注意。パスワードを事前に指定したい場合は別の方法が必要。

圧縮率の確認

1
2
zip -v archive.zip file.txt
# 圧縮率が表示される

-vで各ファイルの圧縮率を確認。テキストファイルはよく圧縮される。

実践的な使い方

バックアップファイルの作成

1
2
3
#!/bin/bash
BACKUP_FILE="backup_$(date +%Y%m%d).zip"
zip -r "$BACKUP_FILE" /home/user/important/ -x "*/.*"

日付付きでバックアップZIPを作成。隠しファイルは除外。

Webプロジェクトの配布パッケージ作成

1
zip -r myapp_v1.0.zip ./src ./public -x "*/node_modules/*" "*/.git/*" "*.log"

node_modules.gitを除外。本番配布用パッケージを作成。

ログファイルの定期的な圧縮

1
2
find /var/log -name "*.log" -mtime +7 | xargs zip archive_old_logs.zip
zip -m archive_old_logs.zip $(find /var/log -name "*.log" -mtime +7)

7日以上前のログを圧縮して削除。ディスク容量管理。

まとめ

zipコマンドのポイント:

  • ファイル・ディレクトリを圧縮してZIPアーカイブを作成
  • -r: ディレクトリを再帰的に圧縮
  • -e: パスワード保護を追加
  • -m: 圧縮後に元ファイルを削除
  • -j: ディレクトリ構造を無視
  • -x: 特定ファイルを除外
  • -u: 更新ファイルのみ追加
  • よく使う組み合わせ: zip -r, zip -e, zip -x

Windowsとの互換性が高く、ファイル共有や配布に最適。unzipと組み合わせて覚えると、ファイル圧縮の全体像が見えてきますよ!