¿Cómo excluir las carpetas proc y sys de la búsqueda con el comando find?

10

Quería ejecutar un script que elija una ruta de directorio aleatoria:

find / -type d | shuf -n1 

Lamentablemente, recibo mensajes de error sobre la prohibición de ingresar a ciertos directorios.

¿Cómo puedo excluir un directorio de la búsqueda con find?

Abdul Al Hazred
fuente

Respuestas:

13

Para excluir rutas específicas, en Linux:

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

Otro enfoque es decirle que findno se repita bajo diferentes sistemas de archivos.

find / -xdev -type d

También puede usar localizar para consultar una base de datos de nombres de archivo (generalmente actualizada todas las noches, también puede actualizarla manualmente updatedb) en lugar del sistema en vivo.

locate '*' | shuf -n 1
Gilles 'SO- deja de ser malvado'
fuente
genial, breve y perspicaz. find / -xdev -type d funciona, pero find / -xdev -type d | shuf -n 1 muestra mensajes de error.
Abdul Al Hazred
1
@AbdulAlHazred no has dicho qué mensajes, pero supongo que son errores de "permiso denegado". O bien ejecutar el comando como root o simplemente ignorar los errores mediante el envío a stderr: find / -xdev -type d 2>/dev/null.
terdon
1
¿No podría hacer? find / \( -path /sys -o -path /proc \) -prune -o -type dSería útil si desea excluir más directorios como /devo /tmp, etc.
BrainStone
6

con GNU find también puede usar opciones de expresiones regulares, por ejemplo, así:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
jose
fuente
ese es el mejor enfoque, por lejos (despotricar: así que hay una opción gnu que hace que find / usable en gnu linux como en cualquier otro sistema operativo que no tenga una implementación de mierda / proceso ;-)
Florian Heigl