find コマンドの o オプションで呼んでない子が出てくる不思議

結論から言うと別に不思議ではなく、使い方を間違えなければ大丈夫だという話。
さて、名前の先頭が a または b のファイルを検索する場合は、o (or) オプションを使って以下のようにやる。
find . -name "a*" -o -name "b*"
しかし、次のような場所でやる場合は、もう少しオプションを追加しないと大量にヒットし過ぎてしまう。
├
├ aaa002
├ aaa003
(中略)
├ aaa100
├ abc.txt
├ bbb.txt
├ ccc.txt
├ ddd.txt
└ eee.txt
そこで、ファイルだけに絞り込むには、-type f を付けて…
find . -name "a*" -o -name "b*" -type f
./aaa001
./aaa002
./aaa003
./aaa004
./aaa005
(以下大量)
うわああああああああああああああこれ条件が「名前の先頭が a(の全て)」または「名前の先頭が b のファイル」になってて全然絞り込めてない!
o (or) オプションの範囲をエスケープした括弧でくくれば…
find . \( -name "a*" -o -name "b*" \) -type f
./abc.txt
./bbb.txt
大丈夫だ。問題ない。
スポンサーリンク
リンク