find / grep Befehl, ohne gemountete Freigaben zu durchsuchen

34

Wenn ich den Befehl find verwendet habe, muss ich fast immer die lokalen Laufwerke durchsuchen. Aber ich habe fast immer super große Netzwerkfreigaben gemountet und diese werden in die Suche einbezogen. Gibt es eine einfache Möglichkeit, diese in den Befehlen find, grep und anderen ähnlichen Befehlen auszuschließen? Beispiel:

find / -name .vimrc

Treibgut N. Jetsam
quelle

Antworten:

46

Verwenden Sie die -fstype localOption, um Folgendes zu finden:

find / -fstype local -name .vimrc

Wenn Sie nur bestimmte Pfade ausschließen möchten, können Sie Folgendes verwenden -prune:

find / -name /path/to/ignore -prune -o -name .vimrc

Aktualisieren:

Der localpsuedo-fstype ist in der mit OS X gelieferten Version von find verfügbar, befindet sich jedoch nicht in GNU find ( von GNU find erkannte f-Typen ).

Wenn Sie GNU find verwenden (wie es auf den meisten Linux-Systemen verwendet wird), möchten Sie stattdessen Folgendes verwenden -mount:

find / -mount -name .vimrc
Doug Harris
quelle
funktioniert das auch bei grep
Treibgut N. Jetsam
1
Ich glaube nicht, dass grep eine solche Option hat. Ich habe normalerweise findPipe verwendet , um grepwie in dieser Antwort gezeigt: superuser.com/questions/80033/… . In letzter Zeit habe ich stattdessen ack( betterthangrep.com ) verwendet, es ackscheint jedoch keine Option zu geben, nur lokale Laufwerke zu durchsuchen.
Doug Harris
Meine Bearbeitung wurde abgelehnt, so dass es nur ein Kommentar ist. Grundsätzlich ist das erste Beispiel falsch, da Sie es hinzufügen müssen, da -prunees sonst weiterhin die unerwünschten Dateisysteme durchläuft. Das zweite Beispiel, von dem ich glaube, dass es -pathstattdessen gedacht war, -namewird den Pfad ignorieren. FWIW ... das letzte Beispiel funktioniert, es bleibt auf dem "aktuellen Dateisystem" und durchläuft keine anderen.
Rogerdpack
20

man find zeigt an:

-xdev Stellen Sie keine Verzeichnisse auf anderen Dateisystemen her.

Pinguineff
quelle
2
-xdevist das gleiche wie -mountFWIW ... :)
Rogerdpack
0

Ursprüngliche Frage war, nur auf lokaler Festplatte zu finden. Der Vollständigkeit halber habe ich Folgendes verwendet.

for PART in `awk '(!/^#/ && $6 != "0" || $3 == "xfs" ) { print $2 }' /etc/fstab 2>/dev/null`; do find $PART -xdev -name .vimrc -print 2>/dev/null; done

Solange Ihre fstab richtig eingerichtet ist, sollte sie nur die lokalen Datenträger durchsuchen. Das heißt, für cifs-Mounts sollte das letzte Flag auf 0 gesetzt sein. Ich habe das OR für xfs-Dateisysteme eingefügt, als wir mit RHEL7 begannen. Sie sollten auch auf 0 gesetzt sein, da sie nach so vielen Neustarts nicht dazu gedacht sind, die Festplatte neu zu ordnen.

Hoffentlich hilft das.

Shaun Saunders
quelle