Comment exclure les dossiers proc et sys de la recherche avec la commande find?

10

Je voulais exécuter un script qui sélectionne un chemin de répertoire aléatoire:

find / -type d | shuf -n1 

Malheureusement, je reçois des messages d'erreur sur l'interdiction d'entrer dans certains répertoires.

Comment exclure un répertoire de la recherche avec find?

Abdul Al Hazred
la source

Réponses:

13

Pour exclure des chemins spécifiques, sous Linux:

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

Une autre approche consiste à dire de findne pas recurer sous différents systèmes de fichiers.

find / -xdev -type d

Vous pouvez également utiliser Locate pour interroger une base de données de noms de fichiers (généralement mise à jour tous les soirs, vous pouvez également la mettre à jour manuellement à l'aide updatedb) au lieu du système en direct.

locate '*' | shuf -n 1
Gilles 'SO- arrête d'être méchant'
la source
grand, court et perspicace. find / -xdev -type d lui-même fonctionne, mais find / -xdev -type d | shuf -n 1 affiche des messages d'erreur.
Abdul Al Hazred
1
@AbdulAlHazred vous n'avez pas dit quels messages mais je suppose que ce sont des erreurs "permission refusée". Soit exécutez la commande en tant que root ou tout simplement ignorer les erreurs en les envoyant à stderr: find / -xdev -type d 2>/dev/null.
terdon
1
Ne pourriez-vous pas le faire find / \( -path /sys -o -path /proc \) -prune -o -type dserait utile si vous souhaitez exclure plus de répertoires comme /devou /tmp, etc.
BrainStone
6

avec GNU find, vous pouvez également utiliser des options d'expression régulière, par exemple comme ceci:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
jose
la source
c'est de loin la meilleure approche (rant: donc il y a une option gnu qui rend find / utilisable sur gnu linux comme sur tout autre OS qui n'a pas d'implémentation merdique / proc ;-)
Florian Heigl