
以下の例をご覧ください。
$ ls -1p
appledir/
applefile
orangedir/
orangefile
$ find . -type f -name apple\*
./applefile
$ find . -type f -name orange\*
./orangefile
$ find . -type f -name apple\* -o -name orange\*
./applefile
./orangedir
./orangefile
$ find . -type f \( -name apple\* -o -name orange\* \)
./applefile
./orangefile
$
期待どおりに機能するには括弧が必要であることに驚きました。引数を評価するための優先順位ルールを内部化していないようですfind
。
必要なときとfind
かっこを使用して基本項目を明示的にグループ化しない場合をどのように簡単に予測できますか?
つまり、私が想像できるルールは何ですか?find
入れるコマンドに括弧を追加しますか?これにより、グループ化されていない式を評価する方法を正確に予測できますか?
答え1
~によると文書、
暗黙的に
-a
(たとえば、表示される2つのテストの間に明示的な演算子がない場合)、または明示的に指定されている場合、これは印刷されないこと-o
を意味します。find . -name afile -o -name bfile -print
afile
find
したがって、基本的に2つの「anded」式を括弧で囲むことを想像できます。あなたの
find . -type f -name apple\* -o -name orange\*
として説明された
find . \( -type f -name apple\* \) -o -name orange\*