Wie verwende ich logisches ODER bei der Suche?


12

In der Bash-Shell lskann eine logische ODER-Funktionalität verwendet werden (natürlich könnte ich das auch, ls name1 name2aber meine wahren Beispiele sind komplizierter):

ls @(name1|name2)

Gibt es eine Möglichkeit, dies mit zu tun find?

Meine naive Umsetzung:

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

funktioniert nicht (es gibt nur nichts aus)


4
Hast du den OPERATORSAbschnitt der findManpage gelesen ?
Steeldriver

Antworten:


18

Sie können -ofür logische verwenden OR. Beachten Sie jedoch, dass alle findPrädikate logische Werte haben, sodass Sie normalerweise ORed Dinge mit Parens gruppieren müssen . Und da Parens auch eine Bedeutung für die Muschel haben, müssen Sie ihnen auch entkommen:

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

5

Um Ihre Frage zu beantworten, können Sie folgende -oOption verwenden:

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

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

so was:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.