Wie kann ich alle Verzeichnisse und Unterverzeichnisse finden (oder ausschließen), die einem bestimmten Muster entsprechen (unter Linux)?

17

Ich versuche, mit dem Linux-Befehl find alle Verzeichnisse und Unterverzeichnisse zu finden, deren Pfad keine .svn-Dateien (versteckte Subversion-Ordner) enthält. Ich kann es nur veranlassen, die tatsächlichen .svn-Verzeichnisse selbst auszuschließen, aber keines der Unterverzeichnisse.

Folgendes mache ich gerade:

find . -type d \! -iname '*.svn*'

Ich habe auch versucht:

find . -type d \! iname '.svn' \! iname '.svn/*'

Nur zu Ihrer Information, ich versuche, das Suchmuster zu verwenden, damit ich einige Subversion-Eigenschaften auf alle Verzeichnisse in meinem Repository anwenden kann, mit Ausnahme der versteckten Subversion-Ordner und ihrer Unterverzeichnisse (indem der Befehl exec auf die vom Befehl find zurückgegebenen Verzeichnisse angewendet wird ) ..

TIA

Jason Down
quelle

Antworten:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
quelle
Ich werde mit diesem gehen, obwohl sie alle zu funktionieren schienen.
Jason Down
Ich habe -prune on find schon einmal benutzt, aber ich hatte diesen \ (... \) Trick nicht gesehen. Vielen Dank.
Rory
Können Sie sagen, wie dies in einer node.js / express-App funktionieren würde, in der ich Knotenmodule vom Zählen der Zeilen ausschließen möchte? Ich habe versucht , find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l ohne Erfolg ...
Schredder
In Reaktion auf @shredding bezüglich Node.js / Express-Apps und Ausschließen von node_modules-Verzeichnissen aus den Suchergebnissen funktioniert dies für mich: find. -name ' .test.js' -not (-wholename '* node_modules ') ... vorausgesetzt , die Tests, die ich ausführen möchte, sind mit dem Zusatz ".test.js" versehen
mysterlune
Würde das ohne die funktionieren -type d? Ich suche gerne nach allen Dateien, schließe aber das ".git" -Dir rekursiv aus
James Mitch
6

Was ist mit einfach

find . -type d |  grep -v '.svn'
Wazoox
quelle
Verliert Ihre Fähigkeit, eine der Suchaktionen zu verwenden.
David Pashley
Ja, aber was ist stattdessen mit einer schönen kleinen Sh-Schleife? :) für DATEI in find . -type d | grep -v '.svn'; Echo was auch immer; erledigt
wazoox
6

Was ist mit der -pathOption zu finden?

find . -type d ! -path '*.svn*'
Rory
quelle
1
Verpasste ein Schlusszitat. Es besteht die Möglichkeit, dass die Platzhalter zu gierig sind.
Dan Carley
2

finden . -path './tmp' -prune -o .......


quelle
2

Du könntest benutzen:

find . -type d -not -wholename '*.svn*' 
idbrii
quelle
es hat das * von der vorderseite der antwort gestrippt ... sollte gefunden werden. -type d -not -wholename ' /.svn/ ' (das ist Wholename Squote Asterisk Slash Dot Svn Asterisk Squote)