Verwenden von „find“ im macOS-Terminal mit regulären Ausdrücken

Verwenden von „find“ im macOS-Terminal mit regulären Ausdrücken

Ich versuche, einen Ordner zu durchsuchen, der Variationen verschiedener Bilddateinamen enthält:

1_2-300x224.jpg
1_2-600x449.jpg
1_2-600x600.jpg
1_2-768x575.jpg
1_2-802x600.jpg
1_2.jpg

Der Plan ist, die Dateien zu finden und zu löschen, die mit 2-4 Ziffern + 'x' + 2-4 Ziffern enden. Ich kann diese Übereinstimmung erstellen aufRegexrmithilfe des Ausdrucks .*(\d{2,4}x\d{2,4}).jpg(dieser Ausdruck hebt alles außer hervor 1_2.jpg).

Das Ausführen liefert jedoch find . -name ".*(\d{2,4}x\d{2,4}).jpg"keine Ergebnisse.

Ich bin sprachlos!

Antwort1

Hier gibt es ein paar Probleme. Erstens -namemüssen Sie, wie John erwähnte, für die Teilstring-Übereinstimmung mit Globs verwenden, -regexund zweitens gibt es Inkompatibilitäten zwischen den regulären Ausdrücken. Standardmäßig verwendet GNU find reguläre Ausdrücke von Emacs und BSD find verwendet reguläre Ausdrücke auf Posix-Basis. Wenn Sie es find.infoinstalliert haben, können Sie hier mehr darüber lesen:

info find.info 'Reference' 'Regular Expressions' 'emacs regular expression'

Unterstützte Dialekte für reguläre Ausdrücke finden Sie hier:

info find.info 'Reference' 'Regular Expressions'

Hier:

* findutils-default regular expression syntax::
* emacs regular expression syntax::
* gnu-awk regular expression syntax::
* grep regular expression syntax::
* posix-awk regular expression syntax::
* awk regular expression syntax::
* posix-basic regular expression syntax::
* posix-egrep regular expression syntax::
* egrep regular expression syntax::
* posix-extended regular expression syntax::

GNU finden

posix-extendedMit GNU find können Sie Ihren Ausdruck folgendermaßen zum Laufen bringen :

find . -regextype posix-extended -regex '.*[0-9]{2,4}x[0-9]{2,4}.jpg'

Ausgabe:

./1_2-600x600.jpg
./1_2-802x600.jpg
./1_2-600x449.jpg
./1_2-300x224.jpg
./1_2-768x575.jpg

BSD finden

Ich habe keinen Zugriff auf BSD Find, aber ich denke, das sollte funktionieren:

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'

verwandte Informationen