find mit regexp

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Arrpork
Beiträge: 111
Registriert: 25.02.2004 13:42:17

find mit regexp

Beitrag von Arrpork » 23.10.2005 16:55:18

Hallo,

ich möchte über den find-Befehl in einem Verzeichnis alle Dateien suchen, welche nicht "C64" oder "Amiga" beinhalten.

Folgende Zeile funktioniert (die Verneinung habe ich noch nicht getestet) :

Code: Alles auswählen

find . -regex '.+C64.*.mp3'
Leider funktioniert nicht:

Code: Alles auswählen

find . -regex '.+(C64|Amiga).*.mp3'
Auch mit / statt der Klammern habe ich kein Erfolg.

Vielleicht jemand eine Idee. Es sollte allerdings unbedingt regex sein.


Gruß Arrpork

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.10.2005 17:05:07

beim regex vom "find" mußt du die Klammern nicht escapen wenn du nach den Klammerzeichen suchst:

Code: Alles auswählen

root:~/tmp# touch 'bla(|)bla'
root:~/tmp# find -regex '.*(.*'
./bla(|)bla
root:~/tmp# find -regex '.*|.*'
./bla(|)bla
root:~/tmp# find -regex '.*).*'
./bla(|)bla
folglich mußt du diese Zeichen escapen, wenn diese als Steuerzeichen verwendet werden sollen:

Code: Alles auswählen

root:~/tmp#  find . -regex '.+\(C64\|Amiga\).*.mp3'
./xxC64yymp3
./zzAmigablamp3
Gruß
gms

Antworten