
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 -name
müssen Sie, wie John erwähnte, für die Teilstring-Übereinstimmung mit Globs verwenden, -regex
und 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.info
installiert 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-extended
Mit 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'