find -regex

24/05/2008 - 17:48 von Christian Kujau | Report spam
Hi,

ich moechte nach Dateinamen suchen, die '[' oder ']' (oder beides)
enthalten:


# ls -1
(
)
[
]
test_[a].txt
# find . -type f -regex '.*[\(\)\[].*'
./)
./[
./(
./test_[a].txt
# find . -type f -regex '.*[\(\)\]].*'



Das erste find(1) findet auch alles, bis auf die Datei ']'. Das zweite
find(1) findet dann gar nix mehr. Eigentlich hatte ich sowas vor wie

find . -type f -regex '.*[\(\)\]\[].*'

...was dann Dateinamen mit ( oder ) oder [ oder ] finden sollte. Ich hatte
dann bei meinem GNU find-4.4.0 noch mit -regextype herumexperimentiert,
aber so richtig verstehe ich nicht, warum \[ funktioniert und \] nicht.

Thoughts?

Danke,
Christian.
BOFH excuse #72:

Satan did it
 

Lesen sie die antworten

#1 Paul Hink
24/05/2008 - 18:15 | Warnen spam
Christian Kujau wrote:

Eigentlich hatte ich sowas vor wie

find . -type f -regex '.*[\(\)\]\[].*'

...was dann Dateinamen mit ( oder ) oder [ oder ] finden sollte.



Lass' die Backslashes weg, die tun hier nicht das, was du möchtest:

find . -type f -regex '.*[]()[].*'

Wichtig ist nur, dass die schließende eckige Klammer direkt hinter der
öffnenden eckigen Klammer steht.

Obige Regular Expression findet allerdings alle Dateien, deren *Pfad*
irgendwo mindestens eine eckige oder runde Klammer enthàlt. Wenn du die
Suche auf die *Namen* der Dateien beschrànken möchtest, dann musst du
das auch noch einbauen, z.B. so:

find . -type f -regex '.*[]()[][^/]*'

Oder aber du nimmst einfach -name statt -regex:

find . -type f -name '*[]()[]*'

(Alles getestet mit GNU find 4.2.28).

Ähnliche fragen