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

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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.