Come usare OR logico in find?


12

In bash shell lsposso usare una funzionalità OR logica attraverso (ovviamente potrei anche fare, ls name1 name2ma i miei veri esempi sono più complicati):

ls @(name1|name2)

C'è un modo per farlo usando find?

La mia ingenua implementazione:

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

non funziona (non genera nulla)


4
Hai letto la OPERATORSsezione della findmanpage?
Steeldriver,

Risposte:


19

Puoi usare -oper logico OR. Fai attenzione, tuttavia, che tutti i findpredicati hanno valori logici, quindi di solito dovrai raggruppare le ORcose con le parentesi. E poiché anche i genitori hanno un significato per la shell, dovrai anche sfuggirli:

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

5

Per rispondere alla tua domanda, puoi usare l' -oopzione:

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

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

come questo:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.