Comment utiliser OU logique dans la recherche?

12

Dans bash, le shell lspeut utiliser une fonctionnalité logique OU (bien sûr, je pourrais aussi le faire, ls name1 name2mais mes vrais exemples sont plus compliqués):

ls @(name1|name2)

Existe-t-il un moyen de le faire en utilisant find?

Ma mise en œuvre naïve:

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

ne fonctionne pas (il ne produit rien)

JeffDror
la source
4
Avez-vous lu la OPERATORSsection de la findpage de manuel?
steeldriver

Réponses:

19

Vous pouvez utiliser -opour logique OR. Attention cependant, tous les findprédicats ont des valeurs logiques, vous devrez donc généralement regrouper les ORéléments avec des parenthèses. Et puisque les parens ont également une signification pour le shell, vous devrez également leur échapper:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print
lcd047
la source
5

Pour répondre à votre question, vous pouvez utiliser l' -ooption:

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

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

comme ça:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Arkadiusz Drabczyk
la source