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)


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.