連載
» 2016年08月01日 05時00分 UPDATE

Linux基本コマンドTips(36):【 zip 】コマンド(応用編)――ZIPファイルを作成して元のファイルを削除する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「zip」コマンドの応用編です。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、「zip」コマンドの応用編を解説します。

zipコマンドとは?

 「zip」は、ファイルをZIP形式で圧縮するコマンドです。ZIPはWindows環境で特にポピュラーな圧縮形式で、複数のファイルを圧縮して1つのファイルにすることができます。ZIPファイルから元のファイルを取り出す場合は、「unzip」コマンドを使用します。


zipコマンドの書式

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

※[ ]は省略可能な引数を示しています



zipコマンドの主なオプション

 zipコマンドの主なオプションは次の通りです。


●基本操作
短いオプション 長いオプション 意味
-f --freshen 変更があったファイルの分だけZIPファイルを更新する
-u --update 変更があったファイルの更新または新規ファイルの追加だけを行う
-d --delete 指定したファイルをZIPファイルから削除する
-m --move ZIPファイルに移動する(元のファイルは削除される)
-r --recurse-paths ディレクトリ内のファイルを再帰的に扱う
-T --test 動作をテストする(メッセージなどは表示されるが、ZIPファイルは作成/更新されない)

●対象ファイル関連
短いオプション 長いオプション 意味
-t 日付 --from-date=日付 ファイルの更新日が指定した日付以降のものを対象とする(日付は「mmddyyyy」で指定)
-tt 日付 --before-date=日付 ファイルの更新日が指定した日付以前のものを対象とする(日付は「mmddyyyy」で指定)
-@ 処理対象のファイル名を標準入力から読み込む
-x ファイル --exclude=ファイル 対象から外すファイル名を指定する
-i ファイル --include=ファイル 対象とするファイル名を限定する
-n 拡張子 --suffixes=拡張子 指定した拡張子は圧縮しない
-R --recurse-patterns 指定パターンを再帰的に探して対象にする(例えば、「-R ZIPファイル "*.txt"」でカレントディレクトリ下の「*.txt」を圧縮対象にする)

●格納する内容関連
短いオプション 長いオプション 意味
-D --no-dir-entries ディレクトリは格納せず、ファイルだけを格納する
-y --symlinks シンボリックリンクをたどらずに、シンボリックリンクのまま格納する
-p --paths 相対パス名も含めて格納する(デフォルト)
-j --junk-paths ディレクトリ名なしで格納する
-X --no-extra 拡張属性は格納しない
-l --to-crlf 改行コードを「LF」から「CR LF」に変換する
-ll --from-crlf 改行コードを「CR LF」から「LF」に変換する

●圧縮ファイル関連
短いオプション 長いオプション 意味
-0〜9 圧縮率の調整。「-0」は圧縮せずZIPファイルに格納するのみ〜「-9」で圧縮率を最高にする。圧縮率を上げると処理スピードが落ちる(デフォルトは「-6」)
-s 分割サイズ --split-size=分割サイズ 分割ZIPファイルを作成するときのサイズ
-O ファイル名 --output-file=ファイル名,--out=ファイル名 出力するZIPファイル名(ZIPファイルを元に、別のZIPファイルを作成するような場合に使用)
-e --encrypt 暗号化する
-o --latest-time ZIPファイルのタイムスタンプを、対象ファイルの最新ファイルと同じにする
-F --fix ZIPファイルを修復する(「-FF」でさらに細かく修復を試みる)
-FF --fixfix ZIPファイルを修復する(「-F」では修復できなかったファイルも修復できる可能性がある)
-J --junk-sfx 圧縮ファイルの拡張子(.zip)を付けない
-z --archive-comment ZIPファイルにコメントを追加する(コメントは圧縮後に入力)

●動作関連
短いオプション 長いオプション 意味
-b パス --temp-path=パス 作業ディレクトリを指定する
-q --quiet 動作中のメッセージを表示しない
-v --verbose 動作中のメッセージを詳しくする(ファイルを指定しなかった場合は、zipコマンドのバージョンを表示)
-db --display-bytes 動作中のメッセージに処理したサイズを表示する
-dc --display-counts 動作中のメッセージに処理したファイル数を表示する
-du --display-usize 動作中のメッセージに元のファイルサイズを表示する
-h2 --more-help 詳しいヘルプを表示する

【※】短いオプション、長いオプションともに「-t日付」「-t=日付」「-t 日付」のスタイルで指定可能。




ZIPファイルを作成して元のファイルを削除する

 ZIPファイルを作成した後に元のファイルを削除したい場合は、「-m」オプションを使います。「zip -m ZIPファイル名 対象ファイル」のように指定します(画面1)。ZIPファイルの中にファイルを移動するイメージになります。

コマンド実行例

zip -m text0730 *.txt

(「*.txt」を「text0730.zip」に圧縮して削除する、拡張子「.zip」は自動で追加されるので省略可能)


画面1 画面1 「*.txt」を「text0730.zip」に圧縮すると、元の「*.txt」は削除される


特定の拡張子のファイルを集めてZIPファイルにまとめる

 例えば、「ln」コマンドや「cp」コマンドで「-b」オプションを使うと、既存のファイルをコピーしたり、ファイルにリンクを作成したりした際にバックアップファイルが作成されます。バックアップファイルは、元のファイル名の末尾に「~」(チルダ記号)が付いたものになるので、これらのファイルをZIPファイルにまとめて、元のファイルは削除してみましょう。

 この場合、サブディレクトリも含める「-r」オプションと、ZIPファイルに圧縮して元のファイルを削除する「-m」オプションを組み合わせます。

 対象のファイルはいったん「*」で全てのファイルを指定し、「-i "*~"」でファイル名の末尾が「~」のファイルに限定します。

 具体的には、「zip -mr backup0730 * -i "*~"」のように指定します(画面2)。これで、カレントディレクトリ下の全てのファイルのうち、ファイル名の末尾が「~」のファイルだけが圧縮されて、元のファイルが削除されます。

コマンド実行例

zip -mr backup0730 * -i "*~"

(カレントディレクトリ下のバックアップファイル(ファイル名の末尾が「~」のファイル)を「backup0730.zip」に圧縮して元のファイルを削除する)


画面2 画面2 ファイル名の末尾が「~」のファイルだけを圧縮後、元のファイルを削除する

 上記の実行画面では、確認のためにzipコマンド実行の前後で「find . -name "*~"」実行しています。これは、カレントディレクトリ下にある「"*~"」という名前のファイルを探す、という意味です。

 なお、zipコマンドを実行した同じディレクトリで「unzip backup0730.zip」を実行すれば、「backup0730.zip」に移動したファイルを全て元の場所に戻すことができます。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。