Как использовать логическое ИЛИ в find?

12

В оболочке bash lsможно использовать функциональность логического ИЛИ через (конечно, я мог бы также сделать, ls name1 name2но мои истинные примеры более сложные):

ls @(name1|name2)

Есть ли способ сделать это с помощью find?

Моя наивная реализация:

find . -maxdepth 1 -name @("name1"|"name2") 

не работает (просто ничего не выводит)

JeffDror
источник
4
Вы читали OPERATORSраздел руководства find?
SteelDriver

Ответы:

19

Вы можете использовать -oдля логического OR. Однако findпомните, что все предикаты имеют логические значения, поэтому вам, как правило, нужно группировать ORобъекты вместе с паренами. А так как у паренов есть значение для оболочки, вам также нужно избегать их:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print
lcd047
источник
5

Чтобы ответить на ваш вопрос, вы можете использовать -oопцию:

   expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.

   expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

нравится:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Аркадиуш Драбчик
источник