いくつかのファイル操作を行うためのスクリプトをまとめました。ワイルドカード演算子*
を使用しています あるタイプのすべてのファイルに関数を適用しますが、私が得られないことが1つあります。 unzip
できます このようなフォルダ内のすべてのファイル
unzip "*".zip
ただし、後ですべてのzipファイルを削除するには、実行する必要があります
rm *.zip
つまり、引用符は必要ありません。一方、解凍は、*を指定しただけでは機能しません(「ファイルが一致しませんでした」という警告が表示されます)。
なぜこれが違うのですか?私には、これはまったく同じ操作のように思えます。または、ワイルドカードを誤って使用していますか?
Unixでのワイルドカードの紹介は実際にはこれには触れておらず、rm
には何も見つかりませんでした またはzip
ドキュメント。
Mac(Yosemite)で端末を使用しています。
承認された回答:
あなたは状況を非常によく説明しました。パズルの最後のピースは、unzip
です。 ワイルドカード自体を処理できます:
http://www.info-zip.org/mans/unzip.html
引数
file [.zip]
…
ワイルドカード式は、一般的に使用されるUnixシェル(sh、ksh、csh)でサポートされているものと類似しており、次のものが含まれる場合があります。
*0文字以上のシーケンスに一致します
*ワイルドカードを引用することで、シェルがそれを展開できないようにし、unzip
ワイルドカードを確認し、独自のロジックに従ってワイルドカードを拡張します。
rm
対照的に、ワイルドカードはそれ自体ではサポートされません。 、したがって、ワイルドカードを引用しようとすると、rm
に指示されます 代わりに、ファイル名で文字通りのアスタリスクを探します。
unzip *.zip
の理由 動作しないのはunzip
の構文では、複数のzipファイルを使用できません。複数のパラメータがある場合、2番目以降のパラメータはアーカイブ内のファイルであると想定されます:
unzip [-Z] [-cflptTuvz [abjnoqsCDKLMUVWX $ /:^]] file [.zip] [file(s)…] [-x xfile(s)…] [-d exdir]