Linuxターミナルからファイルを圧縮または解凍する方法
ZIPファイルは、Windows、macOS、さらにはLinuxシステムで一般的に使用されるユニバーサルアーカイブです。いくつかの一般的なLinuxターミナルコマンドを使用して、zipアーカイブを作成したりファイルを解凍したりできます。
ZIP圧縮アーカイブファイル形式
Windows領域でのZIP形式の優位性のおかげで、ZIPファイルはおそらく世界で最も一般的な形式の圧縮アーカイブです。
Linuxでは.tar.gzファイルとtar.bz2ファイルが一般的ですが、WindowsユーザーはおそらくZIP形式でアーカイブを送信します。また、いくつかのファイルをアーカイブしてWindowsユーザーに送信する場合は、ZIP形式が最も簡単で互換性のあるソリューションになります。
関連:Linuxで.tar.gzまたは.tar.bz2ファイルからファイルを抽出する方法
zip、unzip、およびその他のユーティリティ
あなたは既にLinuxやUnixライクなMacOSのようオペレーティングシステムと呼ばれる、あなたは彼らからZIPファイルと抽出ファイルを作成できるようにするツールを持っていることを知っているかもしれないzip
とunzip
。しかし、のような関連のユーティリティの全体の家族がありますzipcloak
、zipdetails
、zipsplit
、とzipinfo
。
いくつかのLinuxディストリビューションをチェックして、これらのユーティリティが標準インストールに含まれているかどうかを確認しました。すべてのユーティリティは、Ubuntu 19.04、18.10、および18.04に存在していました。それらはManjaro18.04にも存在していました。Fedora 29にはとが含まれていましたが、他のユーティリティは含まれzip
てunzip
いませんでした。これはCentOSにも当てはまりました。
不足している要素をFedora29にインストールするには、次のコマンドを使用します。
sudo dnf install perl-IO-Compress
不足している要素をCentOS7にインストールするには、次のコマンドを使用します。
sudo yum install perl-IO-Compress
上記に記載されていないLinuxディストリビューションにzipユーティリティがない場合は、そのLinuxディストリビューションのパッケージ管理ツールを使用して必要なパッケージをインストールします。
zipコマンドを使用してZIPファイルを作成する方法
ZIPファイルを作成するにzip
は、アーカイブファイルの名前とそれに含めるファイルを指定する必要があります。アーカイブ名に「.zip」拡張子を追加する必要はありませんが、追加しても害はありません。
source_code.zip
現在のディレクトリにあるすべてのCソースコードファイルとヘッダーファイルを含むと呼ばれるファイルを作成するには、次のコマンドを使用します。
zip source_code * .c * .h
各ファイルは、追加されるたびに一覧表示されます。ファイルの名前とそのファイルで達成された圧縮の量が表示されます。
新しいZIPアーカイブを見ると、「。zip」ファイル拡張子がによって自動的に追加されていることがわかりますzip
。
ls -l source_code.zip
zip
ZIPファイルの作成時にからの出力を表示したくない場合は、-q
(静かな)オプションを使用します。
zip -q source_code * .c * .h
ZIPファイルにディレクトリを含める
ZIPファイルにサブディレクトリを含めるには、-r
(再帰的)オプションを使用し、コマンドラインにサブディレクトリの名前を含めます。以前と同じようにZIPファイルを作成し、アーカイブサブディレクトリも含めるには、このコマンドを使用します。
zip -r -q source_code archive / * .c * .h
作成している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ファイル」の拡張子を提供する必要性を。
source_code.zipを解凍します
ファイルが抽出されると、ターミナルウィンドウに一覧表示されます。
ZIPファイルには、ファイルの所有権の詳細は含まれていません。抽出されるすべてのファイルには、それらを抽出するユーザーに設定された所有者があります。
と同様zip
にunzip
、-q
(静かな)オプションがあるため、ファイルが抽出されるときにファイルリストを表示する必要はありません。
unzip -q source_code.zip
ターゲットディレクトリへのファイルの抽出
特定のディレクトリにファイルを抽出するには、-d
(ディレクトリ)オプションを使用して、アーカイブを抽出するディレクトリへのパスを指定します。
unzip -q source_code.zip -d ./development
パスワードで保護されたZIPファイルを抽出する
パスワードを使用してZIPファイルが作成されている場合は、パスワードの入力unzip
を求められます。正しいパスワードを入力し unzip
ないと、ファイルは抽出されません。
unzip -q source_code.zip
パスワードが他の人に見られることや、コマンド履歴に保存されることを気にしない場合は、-P
(password)オプションを使用してコマンドラインでパスワードを指定できます。(大文字の「P」を使用する必要があります。)
unzip -P fifty.treacle.cutlass -q source_code.zip
ファイルを除外する
特定のファイルまたはファイルのグループを抽出したくない場合は、-x
(除外)オプションを使用します。この例では、拡張子が「.h」で終わるファイルを除くすべてのファイルを抽出します。
unzip -q source_code.zip -x * .h
ファイルの上書き
アーカイブを抽出したが、抽出したファイルのいくつかを誤って削除したとします。
そのための簡単な修正は、ファイルをもう一度抽出することです。ただし、以前と同じディレクトリにあるZIPファイルを抽出しようとすると、ファイルのunzip
上書きに関する決定を求めるプロンプトが表示されます。次のいずれかの応答が期待されます。
r
(名前の変更)応答とは別に、これらの応答では大文字と小文字が区別されます。
- 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 | もっと少なく
出力には、ZIPファイル内のディレクトリとファイル、それらの長さ、およびアーカイブに追加された日時が表示されます。「q」を押して終了しless
ます。
後で説明するように、さまざまな種類の情報を提供するZIPファイルの内部を覗く方法は他にもあります。
zipcloakコマンドでパスワードを追加する
ZIPファイルを作成したのにパスワードを追加し忘れた場合、どうすればよいですか?zipcloak
コマンドを使用して、ZIPファイルにパスワードをすばやく追加できます。コマンドラインでZIPファイルの名前を渡します。パスワードの入力を求められます。パスワードをもう一度入力して確認する必要があります。
zipcloak source_code.zip
zipdetailsコマンドを使用してファイルの詳細を表示する
このzipdetails
コマンドは、ZIPファイルに関する多くの情報を表示します。このコマンドが提供できる出力の量を処理する唯一の賢明な方法は、それをパイプでつなぐことless
です。
zipdetails source_code.zip | もっと少なく
ZIPファイルがパスワードで保護されている場合でも、情報にはファイル名が含まれることに注意してください。このタイプの情報は、メタデータとしてZIPファイル内に保存され、暗号化されたデータの一部ではありません。
zipgrepコマンドを使用してファイル内を検索する
このzipgrep
コマンドを使用すると、ZIPファイル内のファイル内を検索できます。次の例では、ZIPファイル内のどのファイルに「keyval.h」というテキストが含まれているかを知りたいと思います。
zipgrep keyval.h source_code.zip
私たちは、そのファイルを見ることができますslang.c
し、getval.c
我々はまた、これらの各ファイルの2つのコピーは、ZIPファイル内の異なるディレクトリにあることを確認することができ、文字列「keyval.h」を含みます。
zipinfoコマンドで情報を表示する
このzipinfo
コマンドは、ZIPファイルの内部を調べるさらに別の方法を提供します。前と同じように、出力をless
。にパイプします。
zipinfo source_code.zip | もっと少なく
左から右に、出力は次のように表示されます。
- ファイルのアクセス許可
- ZIPファイルの作成に使用されたツールのバージョン
- 元のファイルサイズ
- ファイル記述子(以下で説明)
- 圧縮の方法(この場合は収縮)
- データとタイムスタンプ
- ファイルの名前と任意のディレクトリ
ファイル記述子は2文字で構成されています。最初の文字は「t」または「b」で、テキストまたはバイナリファイルを示します。大文字の場合、ファイルは暗号化されます。2番目の文字は4文字のうちの1文字です。この文字は、このファイルに含まれるメタデータのタイプ(none、拡張ローカルヘッダー、「追加フィールド」、またはその両方)を表します。
- -:どちらも存在しない場合、文字はハイフンになります
- l:拡張ローカルヘッダーはあるが追加フィールドがない場合
- x:拡張ローカルヘッダーはないが、追加のフィールドがある場合
- X:拡張ローカルヘッダーがあり、追加のフィールドがある場合
zipsplitコマンドでファイルを分割する
ZIPファイルを他の人に送信する必要があるが、サイズの制限やファイルの送信に問題がある場合は、zipsplit
コマンドを使用して、元のZIPファイルを小さなZIPファイルのセットに分割できます。
-n
(サイズ)オプションを使用すると、新しいZIPファイルのそれぞれの最大サイズを設定することができます。この例では、source_code.zip
ファイルを分割しています。新しいZIPファイルを100KB(102400バイト)より大きくすることは望ましくありません。
zipsplit -n 102400 source_code.zip
選択するサイズは、ZIPファイル内のどのファイルのサイズよりも小さくすることはできません。
これらのコマンドを使用すると、Linuxターミナルを離れることなく、独自のZIPファイルを作成したり、受け取ったZIPファイルを解凍したり、その他のさまざまな操作を実行したりできます。