Linuxでファイルを圧縮、および解凍するzipコマンドを紹介します。
ファイルサイズを小さくするための圧縮処理は、ダウンロードやメールに添付するファイルの容量を抑えられるだけでなく、サーバーやPCにデータやバックアップを保存する際のリソース削減にも有効です。圧縮処理はビジネスのみならず、今や当たり前のように広く使われています。
1.Linuxの圧縮形式はGUN Zipが主流
Linuxでの圧縮形式は様々ありますが、GNU Zip形式が主流となっています。
GNU Zip形式では、圧縮処理としてgzipコマンドがあり、圧縮ファイルの拡張子は「.gz」となります。
一方、本記事で主に紹介するzip形式は、Windowsでの圧縮処理にも広く使われています。 zip形式はLinuxにおいてはあまり主流ではありませんが、Linuxの環境からWindows環境へデータを移す場合にはzip形式での圧縮を行うと良いでしょう。
2.Linuxでは複数ファイルはアーカイブしてから圧縮する
GNU Zip形式のgzipコマンドは、ディレクトリの圧縮に対応していません。
ディレクトリを含め、いくつかのファイルを一緒に圧縮するには、ファイルをまとめる処理、アーカイブ(tarコマンド)をまず実行します。そして、アーカイブファイルを圧縮(gzipコマンド)する流れになります。
慣習として、アーカイブファイルの拡張子は「.tar」、アーカイブ後の圧縮ファイルには「.tar.gz」という拡張子が使われます。
3.zip形式は、アーカイブと圧縮処理を同時に実行
GNU Zip形式とは異なり、zip形式ではアーカイブと圧縮処理に分かれておらず、アーカイブと圧縮処理を同時に実行することが可能です。
zip形式で圧縮したファイルの拡張子は「.zip」となるのが一般的で、圧縮にはzipコマンドがあります。
コマンド | 概要 |
---|---|
zip [オプション] 圧縮ファイル名 圧縮ファイルパス |
圧縮ファイル名で圧縮ファイルを作成する |
zipのオプション | 概要 |
---|---|
-r | 指定したディレクトリを再帰的に圧縮する |
-q | 圧縮したファイル名を表示させない |
-e | 圧縮ファイルにパスワードを設定する |
-d | 圧縮ファイルの中で指定ファイルを削除する |
zipコマンドでrオプションをつけることで、ディレクトリだけではなく、ディレクトリの中に含まれるファイルも全てまとめて圧縮することができます。(アーカイブ処理と圧縮を一度にすることができます)
ファイル単体の場合でもrオプションを付けて実行できますので、zipコマンドは常にrオプションをつけた方が良いでしょう。
【例】zipコマンドのrオプションでディレクトリを圧縮する
・zip -r dir1.zip dir1
ファイルが5つ存在する(file-1.txt~file-5.txt)ディレクトリdir1を圧縮して、圧縮ファイル名としてdir1.zipを指定しています。
-rをつけることで、配下にあるファイルも同時にまとめて圧縮することができています。
上記の例ではzipコマンドの後に圧縮したファイル名が全て列挙されていますが、ファイル名が多い場合などこれらの表示をさせたくない場合には、qオプションを使います。
【例】zipコマンドのqオプションで圧縮ファイル名を非表示
・zip -rq dir1.zip dir1
zipコマンドにqオプションを追加することで、圧縮対象のファイル名が表示されなくなります。
また、圧縮ファイルの中身が知りたい場合は、zipinfoコマンドを用いることで、どのようなファイルが圧縮されているのか、圧縮ファイル中のファイル詳細を確認することができます。
【例】圧縮ファイルの詳細を表示する
・zipinfo dir1.zip
「zipinfo 圧縮ファイル名」で詳細を確認できます。
3.1 パスワードを設定する zip -eオプション
機密情報や重要なファイルにはパスワードをつけると安心です。
圧縮ファイルに対してパスワードを設定するには、zipコマンドのeオプションを利用します。
【例】zipコマンドで圧縮ファイルにパスワードを設定
・zip -r dir1.zip -e dir1
eオプションを追加することで、設定するパスワードが聞かれます。
Enter password:で任意のパスワードを設定し、確認のためにもう一度Verify password:で同様のパスワードを設定します。
eオプションでパスワードを設定すると、展開する際、以下のようにパスワードを聞かれるようになります。
3.2 特定のファイルをzipファイルから削除する zip -dオプション
圧縮ファイルの中にある複数のファイルの中から、特定のファイルだけを削除したいオプションがdオプションです。
圧縮ファイルを展開→一部ファイル削除→再圧縮という工程なくして、任意のファイルのみ削除することができます。
・zip -d dir1.zip dir1/file-4.txt
dオプションを使って指定したファイルだけを圧縮ファイルから削除しています。
削除後にzipinfoで中身を見てみると、ファイルが5個あった圧縮ファイル(dir1/file-1.txt~file-5.txt)の中から、file-4.txtだけが削除されているのがわかります。
4.zip形式の解凍にはunzipコマンド
zipコマンドで圧縮されたファイルを解凍(展開)するには、unzipコマンドを使います。デフォルトではカレントディレクトリに解凍されます。
コマンド | 概要 |
---|---|
unzip [オプション] 圧縮ファイル名 | 圧縮ファイル名の圧縮ファイルを解凍する |
unzipのオプション | 概要 |
---|---|
-d ディレクトリ名 | ディレクトリ名のディレクトリに圧縮ファイルを解凍(展開)する |
-q | 展開ファイル名の一覧を表示しない |
【例】圧縮ファイルを解凍するunzipコマンド
・unzip dir1.zip
圧縮ファイルが展開され、dir1のディレクトリとその配下のファイルが解凍されていることがわかります。
また、unzipコマンドもzipコマンドと同様、展開したファイル名の一覧を表示させたくない場合は、qオプションを使います。
解凍先をカレントディレクトリではなく指定したい場合は、dオプションで展開先ディレクトリを指定します。
【例】dオプションで展開先のパスを指定して、圧縮ファイルを解凍する
・unzip -d testdir dir1.zip
testdirというディレクトリ配下に、圧縮ファイルを展開しています。
ここでは圧縮ファイルの中にdir1というディレクトリが含まれていたため、testdir配下へ展開時に、新しくdir1のディレクトリが作成されています。