/dev/blog/ID10T

Linux: Mehrere Ordner bei "find"-Suche ausschließen

• Linux • Comments
Advertisement

Szenario: Ich will meinen Server auf Dateien, die größer als 100MB sind durchsuchen. Dabei will ich allerdings ein paar Ordner auslassen, da diese auf andere Platten gemountet oder NFS-Shares sind. Eigentlich eine recht einfache Anforderung, so dachte ich. Allerdings habe ich etwa eine Viertelstunde gebraucht, um den Befehl hinzubekommen, daher hier eine kurze Notiz dazu.

Für diesen Zweck wird der prune-Befehl aus dem find-Repertoire genutzt. Prune ist immer wahr, verändert also das Ergebnis eines Checks nicht und bewirkt, dass ein Ordnerbaum nicht durchsucht wird.
Beispiel:

find / -name nfsshare -prune -o -name 'foo.bar' -print

Wir suchen im ganzen Rootsystem nach der Datei foo.bar. Ist der durchsuchte Name nfsshare, wird alles darunterliegende ignoriert, dieser Ordner also nicht durchsucht.
Und nun das ganze mit mehreren Ordnern, der Größe und einem du -h für gefundene Dateien:

find / \( -name mountpoint1 -o -name anothermountpoint -o -name nfsshare \) -prune -o -size +100000k -exec du -h {} \;

Vermutlich ginge das ganze etwas schöner mit Pfadangabe via wholename anstelle von name, aber für meinen Zweck hat es so gereicht.
Eine schöne Erklärung für prune auf Stackoverflow hat mir dabei sehr weitergeholfen.

Advertisement
More posts
comments powered by isso

Advertisement