- ZIP ファイルは Windows、macOS、Linux システムで広く使用されており、最も一般的な形式の圧縮アーカイブとなっています。
- Linux でファイルを圧縮(またはフォルダーを圧縮)するには、次を実行します: zip zipname files_to_be_zipped
- ZIP からファイルを抽出するには、次を実行します: unzip zipname
ZIP ファイルは Windows、macOS、さらには Linux システムでも一般的に使用されるユニバーサル アーカイブです。一般的な Linux ターミナル コマンドを使用して、ZIP アーカイブを作成したり、ZIP アーカイブからファイルを解凍したりできます。
圧縮アーカイブ ファイル形式 ZIP
Windows の領域で ZIP 形式が優勢であるため、ZIP ファイルはおそらく世界で最も一般的な圧縮アーカイブ形式です。
Linux では .tar.gz ファイルと tar.bz2 ファイルが一般的ですが、Windows ユーザーは ZIP 形式でアーカイブを送信することがあります。また、ファイルをアーカイブして Windows ユーザーに送信する場合、ZIP 形式が誰にとっても最も簡単で最も互換性のあるソリューションになります。
zip、unzip、およびその他のユーティリティ
macOS などの Linux および Unix 系オペレーティング システムには、ZIP ファイルを作成してそこからファイルを抽出できるzip
とunzip
というツールがあることをご存知かもしれません。しかし、zipcloak
、zipdetails
、zipsplit
、zipinfo
などの関連ユーティリティが多数あります。
いくつかの Linux ディストリビューションをチェックして、標準インストールにこれらのユーティリティが含まれているかどうかを確認しました。すべてのユーティリティは、Ubuntu 23.04、19.04、18.10、および 18.04 に存在していました。また、Manjaro 18.04 にも存在していました。Fedora 29 にはzip
とunzip
が含まれていましたが、他のユーティリティは含まれておらず、CentOS でも同様でした。
Fedora 29 で不足している要素をインストールするには、次のコマンドを使用します:
sudo dnf install perl-IO-Compress
CentOS 7 で不足している要素をインストールするには、次のコマンドを使用します:
sudo yum install perl-IO-Compress
上記の Linux ディストリビューションに含まれていない zip ユーティリティがある場合は、その Linux ディストリビューションのパッケージ管理ツールを使用して、必要なパッケージをインストールします。
zip コマンドを使用して ZIP ファイルを作成する方法
ZIP ファイルを作成するには、zip
にアーカイブ ファイルの名前とそれに含めるファイルの名前を指定する必要があります。アーカイブ名に「.zip」拡張子を追加する必要はありませんが、追加しても害はありません。
現在のディレクトリにあるすべての C ソース コード ファイルとヘッダー ファイルを含むsource_code.zip
というファイルを作成するには、次のコマンドを使用します:
zip source_code *.c *.h
各ファイルは追加されるとリストされます。ファイルの名前と、そのファイルで達成された圧縮の量が示されます。
新しい ZIP アーカイブを見ると、zip
によって「.zip」ファイル拡張子が自動的に追加されていることがわかります。
ls -l source_code.zip
ZIP ファイルの作成時にzip
からの出力を表示したくない場合は、-q
(quiet)オプションを使用します。
zip -q source_code *.c *.h
ZIP ファイルにディレクトリを含める
ZIP ファイルにサブディレクトリを含めるには、-r
(recursive)オプションを使用して、コマンドラインにサブディレクトリの名前を含めます。以前のように ZIP ファイルを作成し、archive サブディレクトリも含めるには、このコマンドを使用します。
zip -r -q source_code archive/ *.c *.h
作成する ZIP ファイルからファイルを抽出する人に配慮するため、ZIP ファイル内のファイルがディレクトリに格納された状態で ZIP ファイルを作成することがよくあります。ZIP ファイルを受け取った人がそのファイルを抽出すると、すべてのファイルがコンピュータ上のディレクトリにきれいに配置されます。
次のコマンドでは、work
ディレクトリとすべてのサブディレクトリをアーカイブします。このコマンドはwork
フォルダーの親ディレクトリから発行されていることに注意してください。
zip -r -q source_code work/
圧縮レベルの設定
ZIP アーカイブに追加されるファイルに適用される圧縮の量を設定できます。範囲は 0 ~ 9 で、0 は圧縮なしです。圧縮率が高いほど、ZIP ファイルの作成にかかる時間が長くなります。適度なサイズの ZIP ファイルの場合、時間差は大きなペナルティではありません。しかし、適度なサイズの ZIP ファイルの場合、デフォルトの圧縮(レベル 6)で十分でしょう。
zip
で特定レベルの圧縮を使用するには、コマンドラインで「-」を付けた番号をオプションとして渡します。
zip -0 -r -q source_code work/
デフォルトの圧縮レベルは 6 です。-6
オプションを指定する必要はありませんが、指定しても害はありません。
zip -r -q source_code work/
最大圧縮レベルはレベル 9 です。
zip -9 -r -q source_code work/
ここでアーカイブされているファイルとディレクトリを選択すると、圧縮なし(レベル 0)とデフォルトの圧縮(レベル 6)の差は 400K になります。デフォルトの圧縮と最高レベルの圧縮(レベル 9)の差はわずか 4K です。
大したことないように思えるかもしれませんが、何百、何千ものファイルを含むアーカイブの場合は、ファイルあたりのわずかな追加圧縮が価値のあるスペースの節約になります。
ZIP ファイルにパスワードを追加する
ZIP ファイルにパスワードを追加するのは簡単です。-e
(暗号化)オプションを使用すると、パスワードの入力を求められ、確認のために再入力する必要があります。
zip -e -r -q source_code work/
unzip コマンドを使用して ZIP ファイルを解凍する方法
ZIP ファイルからファイルを抽出するには、unzip コマンドを使用し、ZIP ファイルの名前を指定します。".zip" 拡張子を指定する必要があることに注意してください。
unzip source_code.zip
ファイルが抽出されると、ターミナル ウィンドウに一覧表示されます。
ZIP ファイルにはファイルの所有権の詳細はありません。抽出されたファイルはすべて、抽出しているユーザーが所有者に設定されます。
zip
と同様に、unzip
には-q
(quiet)オプションがあり、ファイルが抽出されるときにファイルの一覧が表示されません。
unzip -q source_code.zip
ターゲット ディレクトリへのファイルの抽出
ファイルを特定のディレクトリに抽出するには、-d
(directory)オプションを使用して、アーカイブを抽出するディレクトリへのパスを指定します。
unzip -q source_code.zip -d ./development
パスワードで保護された ZIP ファイルを抽出する
ZIP ファイルがパスワードで作成されている場合、unzip
はパスワードを尋ねます。正しいパスワードを入力しない場合、unzip
はファイルを抽出しません。
unzip -q source_code.zip
パスワードが他の人に見られること、またはコマンド履歴に保存されることを気にしない場合は、-P
(パスワード)オプションを使用してパスワードをコマンドラインで指定できます。(大文字の「P」を使用する必要があります。)
unzip -P fifty.treacle.cutlass -q source_code.zip
ファイルを除外する
特定のファイルまたはファイル グループを抽出しない場合は、-x
(exclude)オプションを使用します。この例では、".h" 拡張子で終わらないすべてのファイルを抽出します。
unzip -q source_code.zip -x *.h
ファイルの上書き
アーカイブを抽出したものの、誤って抽出されたファイルの一部を削除したとします。
その場合の簡単な解決策は、ファイルをもう一度抽出することです。しかし、以前と同じディレクトリに ZIP ファイルを抽出しようとすると、unzip
はファイルの上書きに関する決定を求めます。次のいずれかの応答が期待されます。
r
(rename)応答を除き、これらの応答は大文字と小文字が区別されます。
- y:はい、このファイルを上書きします
- n:いいえ、このファイルを上書きしません
- A:すべて、すべてのファイルを上書きします
- N:なし、どのファイルも上書きしません
- r:名前変更、このファイルを抽出しますが、新しい名前を付けます。新しい名前の入力を求められます。
unzip
が既存のファイルをすべて上書きするようにするには、-o
(上書き)オプションを使用します。
unzip -o -q source_code.zip
不足しているファイルを置き換える最も効率的な方法は、unzip
がターゲット ディレクトリにないアーカイブ内のファイルのみを抽出することです。これを行うには、-n
(上書きしない)オプションを使用します。
unzip -n source_code.zip
ZIP ファイルの中を見る
ZIP ファイルを抽出する前に、その中にあるファイルのリストを見ると便利で参考になります。-l
(リスト アーカイブ)オプションを使用すると、これを実行できます。出力を管理しやすくするために、less
を介してパイプされます。
unzip -l source_code.zip | less
出力には、ZIP ファイル内のディレクトリとファイル、その長さ、およびアーカイブに追加された日時が表示されます。less
を終了するには、「q」を押します。
見てきたように、ZIP ファイルの中を覗く方法は他にもあり、さまざまな種類の情報が得られます。
zipcloak コマンドでパスワードを追加する
ZIP ファイルを作成したがパスワードを追加し忘れた場合、どうしたらよいでしょうか?zipcloak
コマンドを使用して、ZIP ファイルにパスワードをすばやく追加できます。コマンドラインで ZIP ファイルの名前を渡します。パスワードの入力を求められます。2 回目に入力してパスワードを確認する必要があります。
zipcloak source_code.zip
zipdetails コマンドでファイルの詳細を見る
zipdetails
コマンドは、ZIP ファイルに関する多くの情報を表示します。このコマンドから得られる出力の量を処理する唯一の賢明な方法は、less
を介してパイプすることです。
zipdetails source_code.zip | less
ZIP ファイルがパスワードで保護されている場合でも、情報にはファイル名が含まれることに注意してください。このタイプの情報は、ZIP ファイル内にメタデータとして格納されており、暗号化されたデータの一部ではありません。
zipgrep コマンドでファイル内を検索する
zipgrep
コマンドを使用すると、ZIP ファイル内のファイルを検索できます。次の例では、ZIP ファイル内のどのファイルに「keyval.h」というテキストが含まれているかを知りたいと考えています。
zipgrep keyval.h source_code.zip
slang.c
とgetval.c
というファイルに「keyval.h」という文字列が含まれていることがわかります。また、ZIP ファイル内のさまざまなディレクトリにこれらのファイルの 2 つのコピーがあることもわかります。
zipinfo コマンドで情報を表示する
zipinfo
コマンドは、ZIP ファイルの中を見るための別の方法を提供します。以前と同様に、出力をless
を介してパイプします。
zipinfo source_code.zip | less
出力は左から右に示されています。
- ファイルの権限
- ZIP ファイルの作成に使用されたツールのバージョン
- 元のファイル サイズ
- ファイル記述子(以下で説明)
- 圧縮方法(この場合はデフレーション)
- データとタイムスタンプ
- ファイル名とディレクトリ(ある場合)
ファイル記述子は 2 文字で構成されています。1 文字目は「t」または「b」で、テキスト ファイルまたはバイナリ ファイルを示します。大文字の場合、ファイルは暗号化されています。2 文字目は 4 文字のうちの 1 つです。この文字は、このファイルに含まれるメタデータの種類を表します。なし、拡張ローカル ヘッダー、「追加フィールド」、またはその両方です。
- -:どちらもない場合、文字はハイフンになります
- l:拡張ローカル ヘッダーがあるが、追加フィールドがない場合
- x:拡張ローカル ヘッダーがないが、追加フィールドがある場合
- X:拡張ローカル ヘッダーがあり、追加フィールドがある場合
zipsplit コマンドでファイルを分割する
ZIP ファイルを他の人に送信する必要があるが、サイズ制限やファイルの送信に問題がある場合は、zipsplit
コマンドを使用して元の ZIP ファイルをより小さな ZIP ファイルのセットに分割できます。
-n
(サイズ)オプションを使用すると、新しい ZIP ファイルの最大サイズを設定できます。この例では、source_code.zip
ファイルを分割しています。新しい ZIP ファイルが 100 KB(102400 バイト)を超えないようにします。
zipsplit -n 102400 source_code.zip
選択したサイズは、ZIP ファイル内のどのファイルのサイズよりも小さくできません。
これらのコマンドを使用すると、独自の ZIP ファイルを作成したり、受信した ZIP ファイルを解凍したり、Linux ターミナルを終了することなく、さまざまな操作を実行したりできます。
コメントする