Linuxコマンド zip(zip形式アーカイブに圧縮する)

指定したファイル・ディレクトリをUnixやWindows、Mac OS Xなど複数プラットフォームで利用できるPKZIP互換圧縮アーカイブに圧縮するzipコマンド概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

出力する圧縮ファイルとZIPファイルにまとめる「ファイル名・・・」を指定します。指定したファイルのみ圧縮するので、特定のディレクトリ以下をすべてまとめて処理をする場合は、-rオプションが必要になります。ディレクトリも処理対処に指定でき、「*(ワイルドカード)」を利用したファイルパスも指定できます。

書式

$zip [オプション] [ファイル名・・・]

zipは標準でインストールされていないことがあるので、その場合は「yum install zip」でインストールする必要がある。

オプション

-f,
–freshen
アーカイブ内のファイルに既に含まれている場合は更新する
-u,
–update
アーカイブ内のファイルがあるか無いかに限らず更新する
-d,
–delete
ZIPファイルの中にある指定したファイルを削除する
-m,
–move
指定したファイルをZIPファイルの中に移動し、元ファイルを削除する
-r,
–recurse-paths
指定したディレクトリを再帰的に圧縮する
-l,
–to-crif
改行コードをLFからCRLFに変換する(-llを指定した場合はCFLFからLFに変換する)
-q,
–quiet
静的に処理を行う(デフォルトは圧縮状況などを表示する)
-c,
–entry-comments
それぞれのファイルにコメントを追加する
-@標準入力からファイル名を指定する。1行に1ファイルとなるがディレクトリもファイルとして扱う
-e,
–encry-comments
パスワードによる暗号化したアーカイブを作成する
-x ファイル名・・・,
–exclude ファイル名・・・
圧縮対象から除去するファイルを指定する
-z作成するZIPファイルにコメントを追加する
-O ファイル名
–out ファイル名
出力するアーカイブファイルを指定する
-P パスワード,
–password パスワード
暗号化アーカイブへのパスワードを指定する(コマンドラインによる指定は安全ではない)
オプション一覧表

【基本使用例】

ファイルを圧縮する

$zip アーカイブ名 圧縮対象のファイル名

実行結果

[centos@work sample]$ls
http.log
[centos@work sample]$ 
[centos@work sample]$zip httplog.zip http.log 
  adding: http.log (deflated 25%)
[centos@work sample]$ls
http.log  httplog.zip
[centos@work sample]$ 

複数のファイルをまとめて圧縮ファイルを作成する

サンプル

$zip log.zip -r .

実行結果

[centos@work sample]$ls
http1.log  http2.log
[centos@work sample]$zip log.zip -r .
  adding: http1.log (stored 0%)
  adding: http2.log (stored 0%)
[centos@work sample]$ls
http1.log  http2.log  log.zip
[centos@work sample]$ 
 

ワイルドカードでファイルを指定して圧縮する

サンプル

$zip log.zip http*.log

実行結果

[centos@work sample]$zip log.zip http*.log
  adding: http1.log (stored 0%)
  adding: http2.log (stored 0%)
[centos@work sample]$ls
http1.log  http2.log  log.zip
[centos@work sample]$ 
 

除外するファイルを指定して圧縮ファイルを作成する

サンプル

$zip log.zip -x http1.log -r .

実行結果

[centos@work sample]$ls
http1.log  http2.log
[centos@work sample]$zip log.zip -x http1.log -r .
  adding: http2.log (stored 0%)
[centos@work sample]$ls
http1.log  http2.log  log.zip
[centos@work sample]$ 

findでファイルリストを作成しzipの標準入力から圧縮対象ファイルを圧縮する

サンプル

$find . -type f | zip -@ log.zip

実行結果

[centos@work sample]$ls -la
total 16
drwxrwxr-x  2 centos centos  72 Feb 20 07:54 .
drwx------. 6 centos centos 142 Apr 26  2021 ..
-rw-rw-r--  1 centos centos   4 Feb 20 07:41 http1.log
-rw-rw-r--  1 centos centos   6 Feb 20 07:41 http2.log
-rw-rw-r--  1 centos centos 174 Feb 20 07:50 log1.zip
-rw-rw-r--  1 centos centos 488 Feb 20 07:54 log2.zip
[centos@work sample]$find ./ -type f | zip -@ log.zip
  adding: http1.log (stored 0%)
  adding: http2.log (stored 0%)
  adding: log2.zip (stored 0%)
  adding: log1.zip (stored 0%)
[centos@work sample]$ls
http1.log  http2.log  log1.zip  log2.zip  log.zip
[centos@work samplek]$ 

圧縮ファイルに含める各ファイルにコメントをつける

サンプル

$zip log.zip -c http*

実行結果

[centos@work sample]$ls
http1.log  http2.log
[centos@work sample]$zip log.zip -c http*
  adding: http1.log (stored 0%)
  adding: http2.log (stored 0%)
Enter comment for http1.log:
2022/01/01 log
Enter comment for http2.log:
2022/01/02 log

[centos@work sample]$unzip -l log.zip 
Archive:  log.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        4  02-20-2022 07:41   http1.log
2022/01/01 log
        6  02-20-2022 07:41   http2.log
2022/01/02 log
---------                     -------
       10                     2 files
[centos@work sample]$ 

圧縮ファイルにコメントを追加する

サンプル

$zip log.zip -c http*

実行結果

[centos@work sample]$unzip -l log.zip 
Archive:  log.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        4  02-20-2022 07:41   http1.log
2022/01/01 log
        6  02-20-2022 07:41   http2.log
2022/01/02 log
---------                     -------
       10                     2 files

[centos@work sample]$zip -z log.zip 
enter new zip file comment (end with .):
アーカイブコメントてすと
.
[centos@work sample]$unzip -l log.zip 
Archive:  log.zip
アーカイブコメントてすと
  Length      Date    Time    Name
---------  ---------- -----   ----
        4  02-20-2022 07:41   http1.log
2022/01/01 log
        6  02-20-2022 07:41   http2.log
2022/01/02 log
---------                     -------
       10                     2 files
[centos@work sample]$ 
 

圧縮ファイルにパスワードで暗号化する

サンプル

$zip log.zip -e http*

実行結果

[centos@work sample]$ls
http1.log  http2.log

[centos@work sample]$ zip log.zip -e http*
Enter password: 
Verify password: 
  adding: http1.log (stored 0%)
  adding: http2.log (stored 0%)
[centos@work sample]$ unzip log.zip 
Archive:  log.zip
[log.zip] http1.log password: