私が確認した内容は次のとおりです。
find mydir -maxdepth 2 -name .project -or -name .classpath
出力は次のとおりです。
mydir/.project
mydir/.classpath
同時に
find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;
出力は次のとおりです。
mydir/.classpath
これにより、見つかった項目は1つだけ一覧表示されます。なぜですか?
xargsは期待どおりに動作します。
find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};
印刷:
mydir/.project
mydir/.classpath
私は何が欠けていませんか-exec
?
答え1
式はfind
基本的に述語(ブール条件)のリストです。ほぼすべてのブールコンテキスト(find
式を含む)でAND
演算子が優先されますOR
。優先順位ルールを明示的にするために括弧を追加すると、2番目のfind
式は論理的に次のようになります。
( -name .project ) OR ( -name .classpath AND -exec echo)
必要な動作を得るには、次のものが必要です。
find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;