Re: Regular Expression bei Dateiendungen mit find
On Tuesday 22 August 2006 16:39, Juergen Christoffel wrote:
> On Tue, Aug 22, 2006 at 10:06:36AM +0200, Gebhard Dettmar wrote:
> > Aber ich kapiere find -regex eh nicht so ganz. Ich habe Dateien wie
> > geb.jpg, gebI.jpg, gebII.jpg usw. find -regex "geb.*" matcht die
> > nicht, da muss noch ein ".*" davor, also ".*geb.*" Nehme an, das liegt
> > daran, dass find bei der Ausgabe immer noch ein ./ vor Dateien, die im
> > Aufrufverzeichnis liegen, stellt.
>
> Jein. find gibt ein "./" nur dann aus, wenn Du sagst "find . -op" oder
> "find -op" ohne Directories. Wenn Du "find *" sagst, gibt's kein "./"
> davor, aber Du findest trotzdem nicht unbedingt das, was Du suchst.
>
find -regex gibt ./ aus
> Ein Blick in die Manpage zu find(1) hilft Dir. Da steht zu "-regex"
>
> This is a match on the whole path, not a search. For example, [...]
>
Das hab ich dann auch gesehen (mea culpa ;-).
> Das heisst soviel wie: das Pattern wird implizit verankert mit einem "^"
> am Anfang und mit einem "$" am Ende des Strings, also "-regex a" findet
> nicht alle Files, die ein "a" im Namen enthalten, sondern nur die, die
> exakt "a" heissen (incl. Directories im Path).
>
Äh, Moment, das findet gar nichts.
> Um also alle Files zu finden, die mit "a" anfangen, muss man mittels
>
> find . -regex '.*/a.*'
>
> suchen. Ist ungewohnt, steht aber eindeutig so in der Dokumentation. Das
Das sind aber nicht alle Dateien, die mit a anfangen, sondern alle,
die ein a enthalten, m.a.W., bei diesem Beispiel so ungefähr 1 Mio. Will
man alle, die mit a anfangen, muss man "find -regex '\.\/a.*'" verwenden.
Aber da sag ich dir bestimmt nichts neues.
> funktioniert analog zum match-Operator in expr(1), der das schon seit eh
> und je so macht.
>
> Sinnvoller ist, wie schon andere sagten, statt dessen klassisch mit grep
> oder egrep zu arbeiten:
>
> find . | grep '/a'
>
> oder
>
> find . | egrep -i 'jpe?g$'
>
Ah ja genau. @Thorsten: damit vermeidest du deine converted.png (wg. "$")
> BTW: sehr hilfreich ist auch das Modul File::Find von Perl, mit dem man
> beliebige Operationen waehrend der Traversierung eines Verzeichnisses
> ausfuehren kann.
>
> --jc
Danke. Uff, das dauert (Fetching with LWP:
ftp://ftp.cs.tu-berlin.de/pub/lang/perl/CPAN/authors/id/R/RG/RGARCIA/perl-5.9.4.tar.gz
mit meinem Modem).
--
Q: What do you say to a New Yorker with a job?
A: Big Mac, fries and a Coke, please!
Reply to: