SHELL - find Befehl - Wort ausschließen

furryhamster

Lt. Commander
Registriert
Okt. 2008
Beiträge
1.098
Hi,

ich suche Dateien die folgende Bedingung erfüllt
- in dem Pfad kommt kein "tags" drin vor
- die Dateien enden mit .sh

Jetzt habe ich z.B. schon versucht mit find alle .sh Dateien zu finden und dann mittels || grep alle mit "tags" zu entfernen. Sobald ich allerdings versu"Event not found" oder wenn ich mit ' statt mit " arbeite findet er keine Ergebnisse.
Das eigentliche regex müsste ja theoretisch so aussehen
".*(?!(tags)).*sh"

find . -regex ".*(?!(tags)).*sh" liefert aber mit " "event not found" bzw. mit ' keine Ergebnisse
 
Zuletzt bearbeitet:
Habe ich gerade mal probiert. Zwar kommt das event not found nicht aber er findet auch keine ergebnisse
 
Du kannst das 'nicht' aus dem regulären Ausdruck rausziehen, da find das selbst unterstützt.
Code:
find -name '*.sh' -and -not -path '*tags*'
So ungefähr. Die Option -and kann man weglassen und -not kann man durch ! ersetzen, was dann aber wieder escaped werden muss.

Der negative Lookahead in deinem reg. Ausdruck funktioniert mMn ohnehin nicht. Funktioniert nur bei sehr wenigen Linux-Befehlen.
 
Vielen Dank, damit hat es geklappt!
Das die Lookaheads oft nicht funktionieren ist mir auch schon aufgefallen. Eigentlich schade, hätte ich schon öfter gebraucht
 
Zurück
Oben