¿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?

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.