圧縮する親フォルダのすべてのサブディレクトリにあるすべての.zipファイルを除外したいのですが、うまくいきません。man zip
ページを確認しましたが、これそしてこれ質問しても成功しませんでした。
私が試してみました:
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x\*.zip
zip -q -r FILE.zip * -x */\.zip
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x \*.zip\*
zip -q -r FILE.zip * -x*.zip
そして、すべての zip ファイルが含まれます (このコマンドで以前に生成された親フォルダー内のファイルは除きます)。
編集:問題は、フォルダ内にすでにZIPファイルを含むFILE.zipがあったことです。zip
コマンドアップデートの代わりに作成する-u オプションを指定しない場合でも、作成しようとしたファイルがすでに存在する場合は、新しい圧縮ファイルが作成されます。
答え1
すでに試したように、除外パターンを引用符で囲む必要があります。「より良い」解決策がある場合でも、最初のパターンが実際に機能するはずです。
しかし、ここでは単純化された例を見てみましょう。拡張子が のファイルを含むディレクトリをいくつか作成しまし.foo
た.bar
。
find
ここで、テスト ディレクトリを一覧表示するには、次のように実行します。すべてのファイルとディレクトリが表示されます。
$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar
これで、何が機能するかを確認できます
(出力ファイルは削除しますが、マッチングには関係ありません)。
すべてのファイルをパックする:
$ zip -r /tmp/out.zip *
adding: 1.bar (stored 0%)
adding: 1.foo (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/sub2/1.foo (stored 0%)
adding: sub1/1.foo (stored 0%)
adding: sub1/1.bar (stored 0%)
ファイルを除く梱包.foo
:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x '*.foo'
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
うまくいきました!
最初のパターンでもう一度試してみます:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x \*.foo
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
動作します!
それで...そこで実際に何を実行したのかをよく見てください。
まず-q
、「quiet」オプションを削除して、例に示されている標準メッセージを非表示にします。
次のステップとして、-v
「verbose」オプションを追加して、より詳細な情報を表示します。詳細が多すぎるかもしれませんが、興味深い情報を見つけられるかもしれません。
コメントから、削除すると-q
すでに効果があることがわかります。
根本的な問題は、テストに使用された zip コマンドが出力ファイルの存在によって変更されたことです。
技術的には、それ自体も変更されていました...
からman zip
:
Command format. The basic command format is
zip options archive inpath inpath ...
where archive is a new or existing zip archive and inpath is a directory or
file path optionally including wildcards. When given the name of an exist‐
ing zip archive, zip will replace identically named entries in the zip ar‐
chive (matching the relative names as stored in the archive) or add entries
for new names.