schedule2018-01-19

zipコマンドでのファイル圧縮と便利なオプション

zip

ファイルをZIP形式に圧縮するコマンド。

ZIPはWindowsでよく見られる圧縮形式です。 構造はファイル単位で圧縮して一つのファイルにアーカイブされています。 圧縮のアルゴリズムはハフマン法辞書式の2つが用いてる。 ここがわかりやすいです。 Macでも正式にサポートされており圧縮解凍が可能です。

以下コマンドはmacOS High Sierraで確認しました。

tarコマンドの使い方はこちら

書式

zip [オプション] ZIPファイル [対象ファイル]

圧縮する zip

$ zip  zip_file target_file.txt

zip_file.zipができます。

解凍する unzip

unzipコマンドを使います。

$ unzip  zip_file.zip

同じ拡張子をまとめて圧縮

$ zip  zip_file *.txt

これでカレントディレクトリにあるテキストファイル.txtをまとめて圧縮できます。

サブディレクトリごと圧縮する -r

ディレクトリの中身を全て含めて圧縮する場合は-rオプションをつけます。

$ zip -r zip_file target_dir

target_dirの中身をすべて圧縮して、ZIP形式のzip_file.zipを生成する。

オプション

オプション 説明
-r ディレクトリ内のファイルを再帰的に扱う
-f 変更があったファイルの分だけZIPファイルを更新する
-u 変更があったファイルの更新または新規ファイルの追加だけを行う
-d 指定したファイルをZIPファイルから削除する

改行コードを変換する

オプション 説明
-l 改行コードをLFからCR LFに変換する
-ll 改行コードをCR LFからLFに変換する

改行コードはLinux/MacではLF、WindowsではCR LFである。 開いたファイルが1行になった経験は数多くあるはず。 圧縮時にオプションをつけて変換しておこう。

  • Linux/Mac から Windows へデータを送る -l
  • Windows から Linux/Mac へデータを送る -ll

パスワード付きのZIPの作成・解凍 -P

# 圧縮
$ zip -P your_password zip_file target_file.txt

# 解凍
$ zip -P your_password zip_file target_file.txt

パスワード付きを普通に解凍してみると、パスワードを尋ねられる。

$ unzip zip_file.zip
Archive:  zip_file.zip
[zip_file.zip] target_dir/aaa.txt password: # パスワードを入力
password incorrect--reenter: # パスワードを間違えると
password incorrect--reenter: # 3回目まで尋ねる
   skipping: target_dir/aaa.txt      incorrect password

解凍せずにZIPの中身を確認する

unzip -l

$ unzip -l zip_file.zip
Archive:  zip_file.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  01-19-2019 00:29   target_dir/aaa.txt
        0  01-19-2019 00:29   target_dir/bbb.txt
        0  01-19-2019 01:32   target_dir/ccc.txt
---------                     -------
        0                     3 files

zipinfoコマンドでも確認できる。

$ zipinfo zip_file.zip
Archive:  zip_file.zip
Zip file size: 514 bytes, number of entries: 3
-rw-r--r--  3.0 unx        0 bx stor 19-Jan-19 00:29 target_dir/aaa.txt
-rw-r--r--  3.0 unx        0 bx stor 19-Jan-19 00:29 target_dir/bbb.txt
-rw-r--r--  3.0 unx        0 bx stor 19-Jan-19 01:32 target_dir/ccc.txt
3 files, 0 bytes uncompressed, 0 bytes compressed:  0.0%

よく使うls -lと似た形式で出力してくれるので見やすい。

おわりに

tarコマンドの使い方はこちら

参考