Я запутался в использовании find
и объединении -printf
с -o
.Скажем, у меня есть несколько файлов в каталоге, например
$ ls
a1 b1
, и я хочу использовать find
с двумя фильтрами.Начиная с AND:
find . -iname "a*" -iname "*1"
./a1
и используя -printf
для подсчета :
find . -iname "a*" -iname "*1" -printf '.'
.
Кажется, хорошо.Теперь попробуйте то же самое с -o
, чтобы получить ИЛИ двух фильтров:
$ find . -iname "a*" -o -iname "*1"
./b1
./a1
$ find . -iname "a*" -o -iname "*1" -printf '.'
.
Почему бы мне не получить ..
?Изменение порядка аргументов не помогает:
$ find . -printf '.' -iname "a*" -o -iname "*1"
...
РЕДАКТИРОВАТЬ:
$ find . -type f \( -iname "a*" -o -iname "*1" \)
..
дает ожидаемое поведение, см. Принятый ответ для объяснения.