Find

Find

# find / -name test -print
/usr/share/alsa/init/test
/usr/bin/test
/usr/lib/ruby/1.9.1/test
Busca un archivo llamado test que empieza con / y luego muestra el nombre del archivo en pantalla

# find / -mount -name test -print
Buscará lo mismo pero omitiendo los directorios superpuestos

La sintaxis completa de find es

find [path] [opciones] [tests] [acciones]

path

puede usar rutas absolutas y relativas, también se pueden especificar múltiples rutas (/home /usr)

opciones

-depth Rastrea los contenidos de un directorio antes de buscar en el propio directorio
-follow Sigue los enlaces simbólicos
-maxdepths n Rastrea n niveles de directorios
-mount No busca en otros sistemas de ficheros

comprobaciones

find evaluará uno por uno todos los archivos que encuentre y les aplicará las comprobaciones que se le indican. Si una prueba devuelve false find abandona el archivo en cuestión y va a por el siguiente, si una prueba envía true find continúa con la siguiente prueba o acción en el archivo actual. Las siguientes son algunas pruebas.

-atime n Se accedió al archivo hace n días
-mtime n Se modificó por última vez hace n días
-name patrón El nombre del archivo, excluyendo cualquier ruta, se corresponde con el patrón proporcionado. Para asegurar que el patrón se transmite directamente a find y no es evaluado por la shell hay que incluirlo entre comillas
-newer otherfile El archivo que se busca es más reciente que otherfile
-type c El archivo es del tipo c ("d" directorio, "f" fichero regular, etc ... mirar manual
-user name El archivo pertenece al usuario especificado

También se pueden combinar las pruebas usando operadores

Op. abreviado Op. completo Significado
! -not invierte la comprobación
-a -and ambas comprobaciones deben ser true
-o -or alguna de las comprobaciones debe ser true

Se puede configurar la preferencia de comprobaciones y operadores usando paréntesis. Como estos tienen un significado especial para la shell hay que "escaparlos" utilizando barras invertidas, además, si se usa un patrón para el nombre del archivo este debe ser incluído entre comillas para que el nombre no sea expandido por la shell sino que se transmita directamente al comando find.

acciones

-exec comando Ejecuta un comando. Debe terminar con una pareja de \;
-ok command Igual que exec pero solicita la confirmación del usuario para cada archivo en los que se cumpla el comando. Debe acabar también con una pareja de \;
-print Muestra el nombre del archivo
-ls Usa el comando ls -l en el archivo actual

Los comandos -exec y -ok adoptan los parámetros posteriores en la línea como parte de sus parámetros hasta terminar con una secuencia \;. Esto es debido a que ejecutan un comando insertado cuyas opciones terminan ahí.

La cadena mágica "{}" es un parámetro especial para los comandos -exec o -ok que se reemplaza con la ruta absoluta al archivo actual.

No hay comentarios:

Publicar un comentario