33.

zip ファイルやディレクトリをzip形式に圧縮する

編集

本稿は Linux の zip コマンドに関する記事です。ファイルやディレクトリを ZIP 形式 に圧縮するコマンドで、解凍側は同じく Linux の unzip や、Windows / Mac の標準機能で展開できます。

基本構文

zip [オプション] 圧縮後のファイル名 圧縮対象のファイル/ディレクトリ名

ディレクトリを圧縮する場合は -r を付与します。

zip -r backup.zip src/
zip data.zip a.txt b.txt c.txt

主なオプション

オプション用途
-rディレクトリを再帰的に
-0-9圧縮率 (-0無圧縮 / -6既定 / -9最大)
-q静かに実行 (進行表示を抑制)
-v詳細表示
-eパスワード保護 (対話入力)
-P パスワードパスワードを引数指定 (履歴に残るので非推奨)
-u既存 zip に追加・更新
-dzip からファイル削除 (zip -d a.zip target)
-x "パターン"除外パターン (-x "*.log" 等)
-i "パターン"対象パターンに限定
-jディレクトリパスを含めない (ファイルだけ)
-yシンボリックリンクをそのまま保存
-X追加属性 (UID/GID 等) を保存しない
-s サイズ分割アーカイブ作成 (-s 100m)

よく使う実例

# ディレクトリを再帰圧縮
zip -r release.zip dist/

# 最大圧縮で
zip -9r release.zip dist/

# ログを除外
zip -r backup.zip project/ -x "*.log" -x "node_modules/*"

# パスワード付き
zip -er secret.zip secret/

# 既存 zip に追加
zip backup.zip extra.txt

# 100MB ごとに分割
zip -s 100m -r big.zip largedir/

解凍コマンド: unzip

unzip backup.zip            # カレントに展開
unzip -d /tmp/out backup.zip # 出力先指定
unzip -l backup.zip         # 中身一覧 (展開しない)
unzip -t backup.zip         # 整合性チェック

zip と他の圧縮形式の比較

形式コマンド用途
zipzip / unzipWin/Mac/Linux 全部で展開しやすい
tar.gztar czvf / tar xzvfLinux で定番、属性保持
tar.xztar cJvftar.gz より高圧縮
tar.bz2tar cjvf中圧縮
7z7z a圧縮率高め (要 p7zip)
gzip 単体gzip1ファイル圧縮

運用上のヒント

  • 巨大ディレクトリの圧縮は時間と一時 IO 負荷がかかる。バックアップウィンドウで実施
  • 本番ログを zip して世代管理するには logrotate が便利
  • 大量小ファイルならtar + gzip のほうが軽い場合あり
  • パスワード付き zip の暗号化は古典的な ZipCrypto が既定で脆弱。機密用途では 7z の AES-256 や暗号化ファイルシステム / 鍵管理サービスを検討
  • 大文字小文字を区別する Linux と、区別しない Windows での名前衝突に注意

注意点

  • zip / unzip標準では入っていないディストロもある。sudo apt install zip unzip 等で導入
  • シンボリックリンク-y を付けないとリンク先のファイルが入る
  • パスワード -Pシェル履歴に残る-e での対話入力が安全
  • 分割ファイルはすべてのファイルが揃っていないと展開不可
  • 大量ファイルでの進捗を見たい場合は pv-v オプションを活用

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ls ファイル/ディレクトリ一覧表示
  2. sudo ユーザー指定
  3. cron/crontab ジョブの自動実行と登録方法
  4. wget http通信によるファイルダウンロード
  5. rm ファイル/ディレクトリ削除
  6. pwd カレントディレクトリの表示
  7. cd ディレクトリの移動
  8. ./configure
  9. make
  10. make install
  11. unzip ファイルの解凍
  12. mv ファイル/ディレクトリの移動および名称変更
  13. mkdir ディレクトリの作成
  14. touch 空ファイルの新規作成
  15. vi テキストディタの使用
  16. find ファイル/ディレクトリ検索
  17. grep 文字列の検索
  18. tail ファイルの末尾表示
  19. curl HTTP通信によるリクエスト
  20. nslookup ドメインのIP解決
  21. apt update パッケージリストの情報を更新
  22. apt upgrade パッケージの更新
  23. ln リンク/ショートカットの作成と削除
  24. rsync ファイル/ディレクトリの同期
  25. ssh リモートとの暗号化通信
  26. scp sshを利用したファイルのコピー
  27. unzip zip ファイルを解凍する
  28. cp ファイル/ディレクトリのコピー
  29. diffファイルの差分抽出
  30. fdisk ハードディスクに対する操作
  31. lsblk デバイスをツリー状で表示する
  32. kill プロセスを終了させる
  33. zip ファイルやディレクトリをzip形式に圧縮する
  34. host ドメインからIPアドレスを確認
  35. chmod 権限の変更
  36. ip IPアドレスの確認
  37. chown ファイル/ディレクトリ所有者の変更
  38. chgrp ファイル/ディレクトリのグループ情報の変更
  39. nohupと'&' プログラムのバックグラウンド実行(ssh接続時)
  40. lsof 開いているポート番号の確認
  41. tar ファイルの圧縮と解凍
  42. file ファイルの種類を表示
  43. cat ファイルの中身を表示
  44. head ファイルの先頭部分を表示
  45. wc 行数/単語数/文字数を確認
  46. shutdown システムのシャットダウンと再起動
  47. ps プロセスの確認
  48. which コマンドの絶対パスを調べる
  49. yum RedHat系ディストリビューションの管理
  50. mount ファイルシステムのマウント
  51. 特定フォルダ以下の特定拡張子のファイルを再帰的に削除する方法
  52. 特定のフォルダとそのサブフォルダ内にある特定のファイル名のファイルを再帰的に削除