2010-05-13 12 views
5

Ich habe einen find Befehl, den ich ausführen, um Dateien, deren Namen foo enthalten zu finden.Wie verhindere ich das Drucken von .git Ordnern?

Ich möchte das .git Verzeichnis überspringen. Der Befehl arbeitet unter außer er druckt ein ärgerlich .git jederzeit überspringt es ein .git Verzeichnis:

find . (-name .git) -prune -o -name '*foo*' 

Wie kann ich die übersprungen .git Verzeichnisse von Druck auf die Standardausgabe zu verhindern?

+1

die Syntax '(-name .git)' macht keinen Sinn – msw

+0

Rechts - ich denke, es sollte sein \\ (-name .git \\) , richtig? –

Antwort

1

Versuchen Sie dieses:

find . -name '*foo*' | grep -v '\.git' 

Diese noch in die .git Verzeichnisse durchqueren, aber werden sie nicht angezeigt werden soll. Oder Sie können mit Ihrer Version kombinieren:

find . (-name .git) -prune -o -name '*foo*' | grep -v '\.git' 

Sie können auch tun es ohne grep:

find . (-name .git) -prune -printf '' -o -name '*foo*' -print 
+0

Okay - ich habe festgestellt, dass ich nicht den'printf 'eingeben muss - ich muss nur den -print auf die Rückseite des Befehls setzen! Zum Beispiel funktioniert das: Fund. \ (-name .git \) -prune -o-name '* foo *' -print Vielen Dank! –

+0

Die Verwendung eines Grep nach dem Fund ist aus vielen Gründen ein schlechter Trick. Erwägen Sie, die eingebauten Optionen in find zum Filtern zu verwenden. –

8

Also nur für eine bessere Sichtbarkeit:

find -name '.git*' -prune -o -name '*foo*' -print 

Dies lässt auch .gitignore-Dateien; Beachten Sie die nachlaufende -print um das Drucken zu vermeiden, -prune stoppt absteigend in es aber ohne -print druckt es trotzdem. Verdrehtes C;

+0

So finden Sie Verzeichnisse: find. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4 -type d -print – Lionel

2
find . -not -wholename "./.git*" -name "*foo*" 

oder, genauer, wenn Sie wollen .git nicht sehen/aber mit .git (.git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*" 

Ein bisschen in andere Verzeichnisse, deren Name auch suchen wollen odder aber effizienter, weil es die ganze .git dir beschneidet:

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
Verwandte Themen