Verwenden von Regex-Gruppen mit „find“

Verwenden von Regex-Gruppen mit „find“

Ich möchte in einer Liste alle Dateien finden, die mit oder enden .pem. .cerMit diesem Befehl lassen sich die PEMs finden.

find . -d 1 -regex ".*\.pem"

Aber dieser Befehl findet nichts:

find . -d 1 -regex ".*\.(pem|cer)"

Diese Syntax funktioniert im BBedit-Musterspielplatz. Gibt es eine Möglichkeit, Regex-Gruppen mit find zu verwenden?

Antwort1

Ich würde hierfür nicht einmal reguläre Ausdrücke verwenden, stattdessen würde ich Folgendes verwenden:

find . -name "*.pem" -o -name '*.cer'

Es könnte sogar schneller sein (obwohl wir hier von Sekundenbruchteilen sprechen), da das Parsen von regulären Ausdrücken mehr CPU-Zeit in Anspruch nimmt.

BEARBEITEN:

Nachdem ich Hannus Kommentar gelesen habe, fällt mir auf (basierend auf dem Befehl, den Sie ursprünglich versucht haben), dass Sie möglicherweise keine Unterverzeichnisse prüfen möchten. Wenn dies der Fall ist, lautet es:

find . -maxdepth 1 -name "*.pem" -o -name '*.cer'

Antwort2

Dieser Befehl findet nichts:

find . -d 1 -regex ".*\.(pem|cer)"

Sie müssen 'anstelle von "und Escape (und )wie folgt verwenden:

find . -d 1 -regex '.*\.\(pem|cer\)'

verwandte Informationen