Wie kann ich die Ordner proc und sys mit dem Befehl find von der Suche ausschließen?

10

Ich wollte ein Skript ausführen, das einen zufälligen Verzeichnispfad auswählt:

find / -type d | shuf -n1 

Leider erhalte ich Fehlermeldungen zum Verbot der Eingabe bestimmter Verzeichnisse.

Wie kann ich mit find ein Verzeichnis von der Suche ausschließen?

Abdul Al Hazred
quelle

Antworten:

13

So schließen Sie bestimmte Pfade unter Linux aus:

find / -path /sys -prune -o -path /proc -prune -o -type d

Ein anderer Ansatz besteht darin, findanzugeben , nicht unter verschiedenen Dateisystemen zu rekursieren.

find / -xdev -type d

Sie können find auch verwenden, umupdatedb anstelle des Live-Systems eine Datenbank mit Dateinamen abzufragen (normalerweise jede Nacht aktualisiert, Sie können sie auch manuell aktualisieren ).

locate '*' | shuf -n 1
Gilles 'SO - hör auf böse zu sein'
quelle
großartig, kurz und aufschlussreich. find / -xdev -type d selbst funktioniert, find / -xdev -type d | shuf -n 1 zeigt Fehlermeldungen an.
Abdul Al Hazred
1
@AbdulAlHazred Sie haben nicht gesagt, welche Nachrichten, aber ich vermute, es handelt sich um "Erlaubnis verweigert" -Fehler. Führen Sie den Befehl entweder als root aus oder ignorieren Sie die Fehler, indem Sie sie an stderr senden : find / -xdev -type d 2>/dev/null.
Terdon
1
Könnten Sie nicht einfach tun find / \( -path /sys -o -path /proc \) -prune -o -type dWäre nützlich, wenn Sie mehr Verzeichnisse wie /devoder /tmpusw. ausschließen möchten
BrainStone
6

Mit GNU find können Sie auch Regex-Optionen verwenden, z. B.:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
jose
quelle
das ist bei weitem der schönste ansatz (rant: also gibt es eine gnu-option, die find / usable unter gnu linux wie auf jedem anderen betriebssystem macht, das keine beschissene / proc-implementierung hatte ;-)
florian