Jak używać logicznego OR w find?

12

W bash'u powłoka lsmoże korzystać z logicznej funkcji OR poprzez (oczywiście mógłbym to zrobić, ls name1 name2ale moje prawdziwe przykłady są bardziej skomplikowane):

ls @(name1|name2)

Czy można to zrobić za pomocą find?

Moja naiwna realizacja:

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

nie działa (po prostu nic nie wyświetla)

JeffDror
źródło
4
Czy czytałeś OPERATORSsekcję findstrony?
steeldriver

Odpowiedzi:

19

Możesz użyć -odo logiki OR. Uważaj jednak, że wszystkie findpredykaty mają wartości logiczne, dlatego zwykle musisz pogrupować ORelementy razem z parens. A ponieważ pareny mają również znaczenie dla powłoki, musisz także uciec przed nimi:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print
lcd047
źródło
5

Aby odpowiedzieć na twoje pytanie, możesz użyć -oopcji:

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

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

lubię to:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Arkadiusz Drabczyk
źródło