データというものは、サイズがあり、それは年々肥大化していくが、それらの情報をそのまま使用していては、効率が良くないことは分かっている。
保存しておく情報、インターネット上の、いわゆる公共データ網でやり取りする情報などを中心に、効率性を上げるための技術として、「圧縮」という技術が存在する。
今回は、様々なコーデックの中で、ポピュラーなコーデックである「zip」を生成するコマンドについて、解説する。
zipコマンドの基礎
まず、文法から。
特定のファイルではなく、カレントディレクトリ内のファイルとフォルダをまとめて圧縮する場合は、「圧縮元のファイル」の部分を「.」(ドット)とする。
例文:「# zip -r test-file.zip . 」
主なオプションについては以下の通り。
- 「-r」
- フォルダをまとめて圧縮する。
上記文法の<圧縮元のファイル>にフォルダ名も指定できるようになる。
その場合<フォルダ名/>となる。 - 「-e」
- パスワードの設定 ※実行直後にパスワードを入力する。
- 「-数字(0~9)」
- 圧縮率の指定で、数字が大きくなるにつれ、圧縮比を上げる。(デフォルトは6)
- 「-x “除外名”(フォルダの場合 “除外フォルダ/*” )」
- このオプションは文末に表記するオプション、連続指定も可能。
例文:# zip <ファイル圧縮名> <圧縮元のファイル> -x “除外名01” “除外名02”
zipコマンドの挙動について
いくつか動作に注意点がある。
まず、圧縮されたファイルは、カレントディレクトリに生成される。
また、「圧縮元のファイル」は複数指定できるが、カレントディレクトリ内のものを「ファイル名」で指定している場合はそのまま圧縮されるが、ルートディレクトリからファイルを指定した場合、指定したディレクトリ構造を生成して圧縮される事を意識しなければならない。
例えばフォルダ名「test」内にあるファイル名「A.txt」および「B.txt」を圧縮する場合。
結果:test-file.zip というファイルが生成され、内部には「A.txt」および「B.txt」がある状態となる
コマンド例02:「# zip test-file.zip /test/A.txt /test/B.txt」
結果:test-file.zip というファイルが生成され、内部には「test」というフォルダがあり、その内部に「A.txt」および「B.txt」がある状態となる。
極端な例として、「A.txt B.txt /test/A.txt」と指定すれば、ファイル内には「A.txt」「B.txt」「testフォルダ内にA.txt」の三つが出来る状態となる。
unzipコマンドの基礎
圧縮があれば、解凍も行う必要がある。
主なオプションについては以下の通り。
- 「-o」
- 展開先に同一名がある場合、上書きする。
- 「-n」
- 展開先に同一名がある場合、上書きしない。
- 「-u」
- 展開先と比較し、更新、新規分のファイル、フォルダを展開。
- 「-f」
- 展開先と比較し、更新分のファイル、フォルダを展開。
- 「-d /展開先ディレクトリ」
- 解凍先を指定する。
- 「-l」
- 圧縮ファイル内を参照。
- 「-t」
- 圧縮ファイルを破損テストする。
unzipコマンドの挙動について
便利な点として、文法の最後に「”ファイル名やワイルドカード”」(クォーテーションで囲む)を表記すると限定的な解凍が可能である。
コマンド例01:「# unzip test-file.zip “*.txt”」
結果:ワイルドカードですべてのテキスト形式(拡張子が.txt)のファイルを指定しているので、アーカイブ内の「テキスト」ファイルのみが解凍される。
また、オプションを指定してない場合の展開先の重複ファイルが認められた場合、以下の出力され、重複ファイルに対する挙動が指定できる。
この場合の意味としては以下の通り。
- 「y」
- 上書きする。
- 「n」
- 解凍しない。
- 「A」
- 全て上書きする。
- 「N」
- すべて解凍しない。
- 「r」
- リネームする。
以上