ディレクトリ内の全てのファイルをZipする?
与えられたディレクトリ内のすべてのファイルを zip
コマンドで圧縮する方法はありますか?.`を使う方法は聞いたことがありますが、拡張子のないファイルにも対応してほしいのです。
487
3
与えられたディレクトリ内のすべてのファイルを zip
コマンドで圧縮する方法はありますか?.`を使う方法は聞いたことがありますが、拡張子のないファイルにも対応してほしいのです。
単に
*
を使えばいいのです。*.*
は必要ありません。Unixではファイルの拡張子は特別なものではありません。*
はゼロ以上の文字(ドットを含む)にマッチします。つまり、foo.png
は0文字以上(正確には7文字)にマッチするのです。デフォルトでは、
*
はドットで始まるファイルにはマッチしないことに注意してください(*.*
もマッチしません)。これはしばしばあなたが望むものです。そうでなくても、bashでは、shopt -s dotglob
とすると、マッチします(ただし、.
や..
は除外されます)。他のシェルでは、ドットファイルを含める方法が異なる(あるいは全くない)場合があります。代わりに、
zip
には-r
(recursive) オプションがあり、ディレクトリツリー全体を一度に処理することができます (そして、ドットファイルの問題を気にする必要はありません)。ここで、
mydir
はファイルのあるディレクトリです。生成される zip には、ファイルだけでなく、ディレクトリ構造も含まれていることに注意してください。peterph氏がコメントで指摘しているように、これは通常、良いことだと考えられます。ZIPを展開すると、展開されたすべてのファイルが1つのサブディレクトリにきちんと格納されます。また、
-j
/--junk-paths
オプションで、パスを保存しないようにZIPに指示することもできます。zip
コマンドには、すべての(多くの)オプションについて説明したドキュメントが付属しています。ドキュメントを見るには、
man zip`と入力してください。これは zip に限ったことではなく、ほとんどのコマンドのドキュメントをこの方法で得ることができます。私の場合は、各ファイルをそれぞれのアーカイブにまとめたかったので、次のようにしました(
zsh
で)。別の方法としては、findとxargs:を使う方法があります(この方法では、ZIPの中に"." ディレクトリが含まれるかもしれませんが、それでも正しく解凍されるはずです)。私のテストでは、zipは圧縮前にドットを取り除いていました)
find .-type f -exec zip zipfile.zip {}。+
(お使いの
find
が+
による exec をサポートしていない場合、+
は\;
で置き換えることができます。遅くなりますが...)デフォルトでは、すべてのサブディレクトリが含まれます。GNU findでは
-maxdepth
でこれを防ぐことができます。