[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: