Formación informática

Java | Joomla | MySQL

Debian - Tema 8.2.1: búsqueda en el árbol de directorios

Este comando no sigue la guía general que hemos usado hasta ahora por motivos puramente didácticos.

Cómo buscar una aguja en un pajar

Función

Se usa para buscar, en uno o más árboles de directorios, archivos que respondan a ciertos criterios, pudiendo aplicarles un tratamiento de acuerdo a una acción determinada. La sintaxis de este comando no sigue las reglas elementales de los comandos de Linux. Así que vamos a aprenderla bien claramente.

Sintaxis

find ruta/s_de_búsqueda criterio/s acción 2>/dev/null

Puesto que no todos los usuarios tienen los mismos permisos, hay que evitar que salgan errores por no tener permiso para leer los archivos o directorios. Para conseguirlo hay que añadir al final de la línea de comandos el argumento siguiente: 2>/dev/null, que nos redirige a este archivo los resultados nulos o con fallo por no tener acceso.

Ruta de búsqueda

Es uno o más directorios del sistema de archivos, separados por espacios. El comando find recorre todo el árbol subyacente del que indiquemos como argumentos en busca de archivos que cumplan los criterios. Por lo tanto, busca en el directorio y sus subdirectorios. Si no especificamos ninguna ruta, la búsqueda se efectúa en el directorio actual.

Criterios, expresiones globales o expresiones de selección.

       Son el equivalente a las opciones. Por tanto, empiezan por un guión medio (-), aunque sean textos que pudiesen encajar con las opciones largas. Son:

  • -name motivo

     Busca en el nombre de los archivos presentes en los árboles de búsqueda el motivo o patrón escrito. Puede contener los mismos caracteres de reemplazo que el Shell pero para que el comando find los interprete hay que escribirlos entre apóstrofes, tanto al principio como al final de la expresión. El apóstrofe está situado en la tecla de cerrar interrogación, arriba a la derecha de la tecla pe.

  • -size [+-]tamaño [bck]

     Determina el tamaño de los archivos a buscar. Si no indicamos ni más ni menos, nos muestra  todos los archivos cuyo valor este comprendido entre dos números enteros. Además, podemos especificar el tamaño del bloque de datos: b para 512 bytes, c para 1 byte y k para 1 KB.

  • -mtime [+-]número_días

     Especifica el tiempo, en días, transcurrido desde la última fecha de modificación de los archivos buscados.

  • -perm permisos

     Permite recuperar todos los archivos con permisos de acceso particulares, pudiendo usar tanto la notación simbólica como octal.

  • -newer archivo_referencia

     Busca todos los archivos cuya fecha de modificación sea más reciente que el archivo de referencia pasado como argumento.

  • -user usuario

     Permite recuperar todos los archivos pertenecientes a un usuario. El parámetro puede ser el login o el UID del usuario.

  • -group grupo

     Permite recuperar todos los archivos pertenecientes a un grupo de usuarios. El parámetro puede ser el login o el GID del usuario.

  • -maxdepth n

     Nos permite indicar un número que representa en cuantos niveles y subniveles queremos hacer la búsqueda. Un 1 indica que hacemos la búsqueda en la carpeta actual. Un 2 que hacemos la búsqueda en el primer subdirectorio y así hasta n.

  • -type [dfl]

     Nos permite buscar un tipo de archivo particular de acuerdo al siguiente código: d para directorios, f para archivos normales y o l para enlaces.

  • -ls

     Nos muestra toda la información sobre los archivos, es equivalente a usar el comando ls pero solo nos muestra los resultados coincidentes con la búsqueda realizada.

Operadores sobre las expresiones

Todas las expresiones anteriores pueden ser combinadas entre sí

  • -and

Muestra todos los archivos que cumplen las dos condiciones de forma simultánea.

  • -or

Muestra todos los archivos que cumplan una de las dos condiciones.

  • -not

     Es la negación lógica y tenemos que escribirla justo antes de la expresión afectada.

  • Paréntesis

     Permiten definir el orden de los operadores lógicos. Se colocan antes y después de un conjunto de expresiones para formar una sola a nivel lógico. Estos paréntesis tienen que ir precedidos de la barra invertida (\) para que el Shell los interprete de forma correcta.

Comando find

Acciones

     Permiten ejecutar acciones sobre el resultado de cada línea o archivo devuelto por find o, en otras palabras, permite incorporar comandos externos para ejecutar sobre cada resultado devuelto. Esto es muy potente.

  • -print

     Muestra el nombre de la ocurrencia encontrada.

  • -exec

     Permite ejecutar un comando externos del Shell por cada ocurrencia encontrada. Las llaves {} se usan para especificar la ruta del archivo encontrado en el comando a ejecutar por find.

  • -ok

Funciona sobre el mismo principio que –exec pero pide una confirmación antes de ejecutar el comando externo para cada ocurrencia encontrada.

  • -ls

     Muestra en detalles los archivos encontrados.

Vamos a ver ejemplos de complejidad creciente para entender su funcionamiento. Así lo más sencillo sería buscar el nombre de un archivo en el directorio de Linux, por ejemplo, el directorio Descargas:

josemariatc@debian:~$ find / -name Descargas 2>/dev/null

/home/josemariatc/Descargas

Ahora vamos a usar los caracteres comodines. Así por ejemplo si queremos buscar todos los archivos cuyo nombre comience con un número y tengan cualquier longitud:

josemariatc@debian:~$ find / -name [0-9]* 2>/dev/null

Si ahora queremos restringir la búsqueda a nombre con cuatros caracteres, entonces tendríamos que teclear:

 josemariatc@debian:~$ find / -name [0-9]??? 2>/dev/null

Supongamos ahora que queremos buscar todos los archivos de los que somos propietarios, entonces tendríamos que escribir:

josemariatc@debian:~$ find /home -user josemariatc

También podemos realizar búsquedas temporales haciendo referencia a la fecha y hora de modificación. Así para buscar todos los archivos modificados en la última hora tendríamos que escribir:

josemariatc@debian:~$ find / -mtime -60 -type f

Una de las actividades básicas del administrador es monitorear el tamaño de los archivos, sobre todo el de los usuarios. Si queremos buscar en el árbol completo los archivos entre 1 y 5 MB tendríamos que teclear:

josemariatc@debian:~$ find / -size +1024k -and -size -5120

Supongamos que ahora queremos sacar un listado de archivos de una carpeta que cumplan un patrón usando la potencia del comando ls. Por ejemplo, si queremos buscar en la carpeta /etc archivos mayores a 5 megas y además mostrar su salida en formato ls tendríamos que escribir:

josemariatc@debian:~$ find /etc -size +5M -exec ls -lh {} \;  2>/dev/null

En este caso particular, ls -lh nos devuelve una salida formateada de ls que se indica con la cadena '{}' y se sustituye por cada salida de find; \; hace que se muestre la salida.

Debian Tema 8.1: caracteres comodín  <- | ->  Debian - Tema 8.2.2: ordenación de resultados 
   GNU/Linux - Temario

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información