括弧

括弧

私が入力したfindコマンドの中には、多くのファイルを無視して*コマンドの最後にジョブを渡さない場合にのみ機能するようです。

この質問の基礎として、次のコマンドを使用します。
find . -depth -name '*.elf' -or -name '*.exe'

実際の例:
find . -depth -name '*.elf' -or -name '*.exe' -or -name 'f*.xml' -or -name '*.html' -or -name '*.jar' -or -name '*.mat' -or -name '*.pyc' -or -name '*_dll' -or -name '*.class' -or -name '*.DS_Store' -or -name '*.dll' -or -name '*.dex'

デフォルトのコマンド自体は多くの出力を提供しますが、次のコマンドは何もしません*:
find . -depth -name '*.elf' -or -name '*.exe' -delete

繰り返しますが、このコマンドは基本コマンドと同じでなければなりませんが、出力を提供しません*:
find . -depth -name '*.elf' -or -name '*.exe' -print

でも*:
find . -depth -name '*.elf' -or -name '*.exe' -exec echo {} \;

findの仕組みについて何か抜けましたか?

私はGNU findバージョン4.8.0を使用しています。

*「うまくいく」とは、私が見つけた基本的なコマンドを実行することを意味します。みんなファイルを一致させるが明示的に操作すると、一貫したサブセットのみが見つかります。つまり、 を渡すと-deleteサブセットが消え、明示的な操作で残ったファイルが見つかりません。デフォルトのコマンドに戻ると、もう一度検索できます。

ベストアンサー1

括弧

明らかに、ジョブはOR式の一部になり、分岐の1つでのみ機能し、同時にすべての分岐の暗黙的な印刷を削除します。 (源泉)

次に、解決策は、またはブランチを含め、タスクが1つのブランチにのみ適用されないようにする次の式を作成することです。
find . -depth \( -name '*.elf' -or -name '*.exe' -or -name 'f*.xml' -or -name '*.html' -or -name '*.jar' -or -name '*.mat' -or -name '*.pyc' -or -name '*_dll' -or -name '*.class' -or -name '*.DS_Store' -or -name '*.dll' -or -name '*.dex' \)

または省略されたモード:
find . -depth \( -name '*.elf' -or -name '*.exe' \)

質問を完了する前に回答を見つけるのに適したクエリを見つけることができなかったので、この質問と回答を投稿し続けています。この新しい質問が誰かに役立つことを願っています。

おすすめ記事