
Im Wesentlichen möchte ich wissen, wie man zwei (oder mehr) Suchbefehle in einem ausführt – eine „oder“-Suche statt einer „und“-Suche:
find . -name "*.pem"
find . -name "*.crt"
Antwort1
find
Der „oder“-Operator von ist -o
:
find . -name "*.pem" -o -name "*.crt"
Es ist ein Kurzschluss,dhDer zweite Teil wird nur ausgewertet, wenn der erste Teil falsch ist: Eine übereinstimmende Datei *.pem
wird nicht getestet *.crt
.
-o
hat eine niedrigere Priorität als „und“, egal ob explizit ( -a
) oder implizit; wenn Sie Operatoren kombinieren, müssen Sie den „oder“-Teil möglicherweise in Klammern setzen:
find . \( -name "*.pem" -o -name "*.crt" \) -print
In meinen Tests ist dies erwartungsgemäß deutlich schneller als die Verwendung eines regulären Ausdrucks (reguläre Ausdrücke sind aufwändiger zu testen als Globs und -regex
testen den vollständigen Pfad und nicht nur den Dateinamen -name
).
Antwort2
Während ich diese Frage eintippte, fiel mir auf, dass find standardmäßig Globbing statt regulärer Ausdrücke verwendet. Aber ich wette, es gibt eine Möglichkeit, reguläre Ausdrücke zu verwenden!
Sicherlich ... ich musste den Regex-Typ ändern, um POSIX-Extended zu verwenden, aber das hat mir das gebracht, was ich wollte.
find . -regextype posix-extended -regex ".*pem|.*crt"
Qaplah!