Page 1 of 1

find und ignorieren von Verzeichnissen

Posted: 2008-11-19 11:40
by rfc
Hi,

ich möchte bei find gerne .svn Verzeichnisse und was darin ist komplett ignorieren.

Mein derzeitiger Versuch:

Code: Select all

find -type f ! -iwholename '*.svn*'
macht optisch dass was ich brauche, aber in Wahrheit geht es trotzdem (!) alle .svn Verzeichnisse durch. Ich muss auf SVN checkouts arbeiten, das sind reine Daten ca 1GB (viele kleine Files) und es dauert totzdem ewig. Verifizifiert hab ich das verhalten mit

Code: Select all

strace -e trace=file find -type f ! -iwholename '*.svn*'
Da sehe ich das er alle .svn auch abläuft, aber nicht ausgibt.

Ich finde keine anderen Parameter so dass find per se derartige Verzeichnisse gar nicht erst abläuft. Ich habs mit -path und -prune schon probiert, aber er scheint hier nicht .svn an beliebiger Tiefe zu erkennen.

danke

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 12:02
by daemotron
Dann ist find vielleicht das falsche Werkzeug, da find immer den komplette Pfadbaum unterhalb des angegebenen Ziels traversiert. Was hast Du denn genau vor? Im Notfall musst Du Dir ein kleines Shell-Skript schreiben, das Deinen Zielpfad mit ls rekursiv durchläuft und dabei .svn ignoriert, aber das dürfte unterm Strich kaum schneller laufen als find mit den .svn-Verzeichnissen...

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 13:07
by rfc
Im Endeffekt mach ich ein grep über die Files. grep -r fällt somit raus. In der Praxis sieht es also so aus:

Code: Select all

find -type f ! -iwholename '*.svn*' -print0 | xargs -0 grep ...

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 13:35
by Joe User

Code: Select all

for dir in `find . -type d ! -name .svn`
do
  find ${dir} -type f -print0 | xargs -0 grep...
done

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 14:26
by rfc
Danke für den Tip. Mist, haut leider auch nicht ganz hin :)

.svn Verzeichnise enthalten Unterverzeichnisse, die werden dadurch nicht ignoriert :-(

Übrigens, dein Beispiel mit "dir" als Variable funktioniert bei mir nicht, weil

Code: Select all

$ ls -ld `which dir`
-rwxr-xr-x 1 root root 77352 2007-01-30 19:51 /bin/dir
Danke trotzdem!

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 16:22
by Roger Wilco
rfc wrote:Übrigens, dein Beispiel mit "dir" als Variable funktioniert bei mir nicht, weil

Code: Select all

$ ls -ld `which dir`
-rwxr-xr-x 1 root root 77352 2007-01-30 19:51 /bin/dir
Wieso sollte ein Programm im Pfad mit einer Schleifenvariablen in Konflikt kommen?

Re: find und ignorieren von Verzeichnissen

Posted: 2008-11-19 17:06
by rfc
Roger Wilco wrote: Wieso sollte ein Programm im Pfad mit einer Schleifenvariablen in Konflikt kommen?
Gar nicht, hab ich wohl einen Fehler gehabt ;)