\r\n\r\n
ZIPファイルは、一般的なアーカイブファイルであり、通常、Windows、macOS、さらにLinuxシステムで使用されます。Linux端末の一般的なコマンドを使用して、zipアーカイブを作成したり、zipアーカイブからファイルを抽出したりすることができます。
WindowsドメインにおけるZIP形式の優位性により、ZIPファイルはおそらく世界で最も一般的な圧縮アーカイブの形式です。
一瞬です。Linuxではtar .gzやtar bz2が一般的ですが、WindowsではZIP形式でアーカイブされたファイルが送られてくることがあります。また、いくつかのファイルをアーカイブしてWindowsユーザーに送りたい場合、ZIP形式が最も簡単で互換性のあるソリューションになります。
関連:Linuxでtar.gzやtar bz2からファイルを取り出す方法。
既にご存知かもしれませんが、LinuxやUnix系OS(macOSなど)には、ZIPやunzipと呼ばれる、ZIPファイルの作成やそこからファイルを取り出すためのツールがあります。しかし、zipcloak、zipdetails、zipsplit、zipinfoなどの関連ユーティリティが存在します。
いくつかのLinuxディストリビューションで、これらのユーティリティが標準インストールされているかどうかを確認しました。これらのユーティリティはすべてubuntu 19.04、18.10、18.04で表示されます。Fedora29にはzipとunzipが含まれていますが、他のユーティリティは含まれていませんし、CentOSも同様です。
Fedora 29 で不足する要素をインストールするには、次のコマンドを使用します。
sudo dnf install perl-IO-CompressCentOS 7 に不足する要素をインストールするには、以下のコマンドを使用します。
sudo yum install perl-IO-Compress上記以外のLinuxディストリビューションでzipユーティリティが不足している場合は、そのLinuxディストリビューションのパッケージ管理ツールを使用して、必要なパッケージをインストールしてください。
ZIPファイルを作成するには、ZIPアーカイブにファイル名とどのファイルを含めるかを指示する必要があります。アーカイブ名に拡張子".zip "を付ける必要はありませんが、付けても害はありません。
次のコマンドで、カレントディレクトリにあるすべてのCソースファイルとヘッダーを含む source_code.zip という名前のファイルを作成します。
zip source_code *.c *.h各ファイルは、追加されるたびに一覧表示されます。ファイル名とそのファイルの圧縮率が表示されます。
新しいZIPアーカイブファイルを見ると、".ZIP "というファイル拡張子がZIPによって自動的に追加されていることがわかります。
ls -l source_code.zipZIPファイル作成時の出力を見たくない場合は、-q(クワイエット)オプションを使用してください。
zip -q source_code *.c *.hZIPファイルにサブディレクトリを含めるには、-r(recursive)オプションを使用し、コマンドラインにサブディレクトリの名前を含めます。ZIPファイルを作成し、従来通りarchiveサブディレクトリを含めるには、次のコマンドを使用します。
zip -r -q source_code archive/ *.c *.h作成したZIPファイルからファイルを取り出す人に配慮して、ファイルはディレクトリに格納された状態でZIPファイルを作成するのが丁寧な場合が多いです。ZIPファイルを受け取った人は、それを解凍すると、すべてのファイルが自分のコンピュータのディレクトリに整然と配置される。
次のコマンドでは、作業ディレクトリとそのサブディレクトリをすべてアーカイブします。このコマンドは、作業フォルダの親ディレクトリから発行されることに注意してください。
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しかない。
これは大したことではないと思われるかもしれませんが、何百、何千ものファイルを含むアーカイブの場合、1ファイルあたりのわずかな追加圧縮が容量の節約につながるのです。
ZIPファイルにパスワードを追加するのは簡単です。-e(暗号化)オプションを使用すると、パスワードの入力と確認のための再入力を促されます。
zip -e -r -q source_code work/ZIPファイルからファイルを取り出すには、unzipコマンドを使い、ZIPファイル名を指定します。なお、拡張子は".zip "である必要があります。
unzip source_code.zipこれらのファイルは、ファイルを展開したときに、ターミナルウィンドウにリストアップされます。
ZIPファイルには、ファイルの所有者の詳細が含まれていません。解凍されたすべてのファイルの所有者は、解凍したユーザーに設定されています。
zipと同様、unzipにも-q(quiet)オプションがあり、解凍時にファイルのリストを見る必要がありません。
unzip -q source_code.zip特定のディレクトリにあるファイルを取り出すには、-d (ディレクトリ) オプションを使用し、アーカイブファイルを取り出すディレクトリのパスを指定します。
unzip -q source_code.zip -d ./developmentZIPファイルがパスワード付きで作成されている場合、unzipはパスワードの入力を要求します。正しいパスワードを入力しないと、unzipはファイルを展開しません。
unzip -q source_code.zipパスワードが他人に見られたり、コマンド履歴に残ったりしても構わない場合は、-P(password)オプションを使ってコマンドラインからパスワードを指定することができます。(大文字の "P "を使用する必要があります)。
unzip -P fifty.treacle.cutlass -q source_code.zip特定のファイルやファイル群を抽出したくない場合は、-x(exclude)オプションを使用します。この例では、拡張子が".h "であるファイルを除くすべてのファイルを取り出したいのです。
unzip -q source_code.zip -x *.h例えば、アーカイブファイルを展開したが、展開したファイルの一部を誤って削除してしまったとします。
手っ取り早いのは、もう一度ファイルを解凍することです。しかし、以前と同じディレクトリでZIPファイルを展開しようとすると、unzipはファイルを上書きするかどうかを決定するように促します。次のいずれかの応答を期待します。
これらの応答は、r(rename)応答を除いて、大文字と小文字を区別する。
既存のファイルを強制的に上書きして解凍するには、-o (overwrite)オプションを使用します。
unzip -o -q source_code.zip見つからないファイルを置き換える最も効果的な方法は、アーカイブ内のファイルのうち、ターゲットディレクトリにないものだけを解凍することです。そのためには、-n (never overwrite) オプションを使用します。
unzip -n source_code.zipZIPファイルを解凍する前に、その中に含まれるファイルの一覧を見ることは、しばしば有用であり、啓発的でもあります。その際、-l(list archive)オプションを使用することができます。より少ないパイプで転送し、扱いやすい出力にします。
unzip -l source_code.zip | less出力には、ZIPファイル内のディレクトリとファイル、その長さ、アーカイブに追加された日時が表示されます。q "を押して、"less "を終了します。
これから説明するように、ZIPファイルの内部を覗く方法は他にもあり、異なるタイプの情報を提供します。
ZIPファイルを作成したが、パスワードを入れ忘れた場合はどうすればいいのか?zipcloakコマンドを使えば、ZIPファイルに素早くパスワードを追加することができます。コマンドラインでZIPファイルの名前を渡します。パスワードの入力画面が表示されます。パスワードの確認のため、再度パスワードを入力する必要があります。
zipcloak source_code.zipzipdetailsコマンドは、ZIPファイルに関する様々な情報を表示します。このコマンドが提供できる出力の量に対処する唯一の合理的な方法は、より少ないパイプでそれを渡すことです。
zipdetails source_code.zip | lessなお、この情報は、ZIPファイルにパスワードがかかっている場合でも、ファイル名を含みます。この種の情報は、メタデータとしてZIPファイルに格納され、暗号化されたデータの一部ではありません。
zipgrepコマンドは、ZIPファイルに含まれるファイルを検索することができます。以下の例では、ZIPファイル内のどのファイルに "keyval.h "というテキストがあるかを知りたいのです。
zipgrep keyval.h source_code.zipslang.cとgetval.cのファイルには、"keyval.h "という文字列が含まれていることがわかります。また、ZIPファイルの異なるディレクトリに各ファイルのコピーが2つ存在することも確認できます。
zipinfo コマンドは、ZIP ファイルの内部を見るための代替手段を提供する。
zipinfo source_code.zip | less左から順に出力されます。
ファイルディスクリプタは2文字で構成される。最初の文字は "t "または "b "で、テキストファイルまたはバイナリファイルを示す。大文字の場合、ファイルは暗号化されます。2文字目は、4文字のうちの1文字とする。この文字は、このファイルに含まれるメタデータの種類(なし、拡張ローカルヘッダ、"extra field"、またはその両方)を示すものである。
ZIPファイルを誰かに送る必要があるが、サイズに制限があったり、ファイル転送に問題がある場合、zipsplitコマンドを使って、元のZIPファイルをより小さなZIPファイルのグループに分割することができます。
n(サイズ)オプションは、新しいZIPファイルごとに最大サイズを設定することができます。この例では、source_code.zip ファイルを分割します。100KB(102400バイト)以上のZIPファイルは必要ありません。
zipsplit -n 102400 source_code.zip選択したサイズは、ZIPファイル内のどのファイルのサイズよりも小さくすることはできません。
これらのコマンドを使うことで、Linuxのターミナルから離れることなく、独自のZIPファイルの作成、受信したZIPファイルの解凍、その他これらのファイルに対する様々な操作を行うことができます。