.svg
find コマンドからファイルを除外しようとしています.jpg
が、両方とも返されます。何が間違っているのでしょうか?
find . \( ! -iname \*\.svg -o ! -iname \*\.jpg \)
答え1
あなたの論理には欠陥があります。現在使用しているコマンドでは、すべての非ファイル.svg
またはすべての非.jpg
ファイルが検索されます。あなたが書いた内容は次のようになります。
検索(SVG以外のものすべて)またはJPG以外のものすべて)
最初の部分は既に評価されており、SVG ファイル以外のすべてのものが返されているため、JPG ファイルが取得されますfind
。オプションの解析方法により、式の最初の部分がor
true と評価された場合、2 番目の部分は考慮されません。
本質的には、find
SVG 以外のすべてのものを返すので、JPG ファイルで何が必要かは考慮されません。
これを論理的に表現する正しい方法は次のようになりますand
。
find . \( ! -iname '*.svg' -a ! -iname '*.jpg' \)
これは次のようになります:
検索(SVG以外のものすべて)そしてJPG以外のものすべて)
または、式全体を否定すると次のようになります。
find . ! \(-iname '*.svg' -o -iname '*.jpg' \)
それは次のようになります:
それ以外のものをすべて検索する(SVGまたはJPG形式)
*
単に一重引用符または二重引用符で囲むと、エスケープ処理を省略できることに注意してください(例 ) -iname '*.jpg'
。これにより、読みやすくなります。