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

結論から言うと別に不思議ではなく、使い方を間違えなければ大丈夫だという話。

さて、名前の先頭が a または b のファイルを検索する場合は、o (or) オプションを使って以下のようにやる。

find . -name "a*" -o -name "b*"

しかし、次のような場所でやる場合は、もう少しオプションを追加しないと大量にヒットし過ぎてしまう。

folder aaa001
folder aaa002
folder aaa003
 more_vert
(中略)
 more_vert
folder aaa100
description abc.txt
description bbb.txt
description ccc.txt
description ddd.txt
description 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

大丈夫だ。問題ない。

スポンサーリンク

Ad