Uso básico de find – GNU/Linux

¡Hola a todos! find es un comando muy poderoso en el mundo GNU/Linux. Conocer su uso básico es de rigor, para todo administrador de éste tipo de sistemas, por cuanto les traigo un poco de información básica al respecto.

El comando find nos sirve para buscar archivos y directorios; como se mencionó anteriormente, es uno de muchos otros comandos extremadamente potentes que tiene Linux. Existen otros comandos de búsqueda pero enfocados a buscar “dentro” de los archivos:

  • awk (Para manipular texto)
  • sed (Permite modificar el contenido del texto)
  • grep (Imprime las líneas que contengan coincidencias para la expresión regular)

A continuación, la sintaxis del comando:

find [ruta] [expresión_búsqueda] [acción]

Donde:

  • [expresión_búsqueda] → Opciones de búsqueda a presentar. Por defecto, muestra el resultado de la búsqueda en pantalla.
  • [acción] → Cualquier comando a ejecutarse sobre cada archivo o directorio encontrado.

Búsqueda básica

Para buscar archivos/carpetas por nombre (distingue mayúsculas y minúsculas), ejecutamos:

find / -name [nombre_archivo_carpeta]

Para buscar archivos/carpetas por nombre, sin distinción de mayúsculas y minúsculas:

find / -iname [nombre_archivo_carpeta]

Podemos usar también expresiones regulares. A continuación, se realiza la búsqueda de todos los archivos/carpetas que inician con un número dígito (del 0 al 9):

find / -name "[0-9]*"

El * es un comodín (wildcard) que viene a significar la búsqueda sobre cualquier cadena de texto.

La siguiente línea de comando muestra todos los archivos/carpetas que inician ya sea con la «M» mayúscula o minúscula.

find / -name "[Mm]*"

La siguiente línea de comando muestra todos los archivos/carpetas que inician desde la letra «a» a la «m» (según el abecedario) y que termine en .txt (o sea, un archivo con extensión .txt

find / -name "[a-m]*.txt"

Podemos hacer búsquedas de archivos/carpetas que pertenezcan a un usuario específico de la siguiente manera:

find /home -user oscard

Obviamente, podemos combinar los criterios de búsqueda a nuestra necesidad. En la siguiente línea de comando, se hace la búsqueda de archivos/carpetas que pertenezcan al usuario especificado y, adicional, que contengan la palabra enero en el nombre.

find /home -user oscard -name "*enero*"

Podemos realizar búsquedas en varias rutas a la vez. En el siguiente ejemplo, ademá de buscar dentro de /etc /usr y /var, se buscarán los archivos/carpetas que tengan que pertenezcan al grupo «admin»:

find /etc /usr /var -group admin

Podemos hacer búsquedas por tipos de archivos específicos. Recordemos que en los sistemas GNU/Linux, todos son archivos (aún los dispositivos, carpetas, enlaces, etc.). En éste caso, podemos especificar un tipo de archivo mediante el parámetro llamado type ; Los tipos de archivos pueden ser:

  • b → Archivo Especial (buffered)
  • c → Archivo Especial (unbuffered)
  • d → Directorio
  • p → Tubería avanzada
  • f → Archivo regular
  • l → Enlace simbólico
  • s → Socket

Un ejemplo de uso puede ser, si queremos buscar únicamente carpetas con un nombre específico:

find ./ -type d -name "doc_"

Búsquedas por tiempo

Podemos hacer búsquedas por tiempo, lo cual tiene una forma un poco complicada o compleja para poder realizarse, pero es necesaria para poder detallar bien la búsqueda requerida. A continuación, se muestran los parámetros que se pueden usar:

  • min → (Períodos en minutos)
  • time → (Períodos de 24 horas)

Al parámetro, le antecede una letra según el siguiente significado:

  • a → (access) Último acceso (lectura)
  • c → (change) Cambio de estado. Por ejemplo cambio de permisos
  • m → (modify) Última Modificación (escritura)

Adicional, es necesario comprender cómo se pueden hacer las búsquedas a través del tiempo; Varias opciones aceptan argumentos numéricos, estos pueden ser indicados de tres maneras posibles:

  • +n → busca valores mayor que n
  • -n → busca valores menor que n
  • n → busca exactamente el valor n

Quizás la mejor forma de entender todo esto es mediante ejemplos prácticos. A continuación, varios ejemplos de búsqueda.

Buscar todos los archivos que se hayan modificado en los últimos 30 minutos:

find / -mmin -30 -type f

En ése caso, la primera m nos indica que se trata de «Modificación» (según lo explicado arriba), y el -30 indica valores menores de 30. Vamos a ver más detenidamente algunos ejemplos con el parámetro time, dado que es como más común hacer búsquedas por días que de minutos. Los parámetros pueden ser entonces:

  • -atime
  • -ctime
  • -mtime

Además de saber que con time el tiempo se mide en periodos de 24 horas, es necesario saber que estos son siempre truncados. Veamos los ejemplos:

La siguiente línea de comando, busca archivos modificados entre ahora y hace un día.

find . -mtime 0

La siguiente línea, busca archivos modificados hace menos de un día.

find . -mtime -1

Busca archivos accedidos entre hace 24 y 48 horas

find . -atime 1

Busca archivos cuyo «status» (permisos) haya cambiado hace más de 48 horas

find . -ctime +1

Búsqueda por tamaño

Otras búsquedas muy útiles es por tamaño de archivos. Para éste tipo de búsquedas, es necesario tener presente lo mencionado anteriormente con respecto al uso de el más «+» y el menos «-» (en los argumentos numéricos).

Para determinar el tamaño, se admiten cuatro parámetros después del número en -size (el cual es el parámetro de tamaño que utilizaremos):

  • c → bytes
  • w → 2 bytes words
  • k → Kilobytes
  • b → 512 Bytes bloques

Veamos algunos ejemplos:

La siguiente línea de comando, busca archivos mayores a 15 Megas con extensión .jpg

find /var/log -size +15000k -name "*.jpg"

La siguiente línea, busca en el home todos los archivos menores a 800 bytes

find $HOME -800c

Búsqueda de archivos de tamaño comprendidos entre 1mb y 10mb

find . -size +1000k -and -size -10000k

Acciones sobre resultados

Con los resultados devueltos de una búsqueda específica, podemos realizar ciertas acciones. El comando find nos permite incorporar comandos externos para ejecutar sobre cada resultado devuelto. El parametros a utilizar es -exec

Veamos algunos ejemplos:

Línea de comando para buscar archivos > 3 Megas y mostrar su salida en formato ls

find /var -size +3000k -exec ls -lh {} \;

Se indica la cadena ‘{}’ que se sustituye por cada salida de find. los caracteres «\;» deben de ser agregados para que funcione bien éste tipo de ejecución.

Línea de comando para borrar archivos mayores a 1MB en la carpeta /tmp

find /tmp -size +3000k -exec rm -f {} \;

El comando find también tiene un parámetro para hacer lo mismo que la línea de comando anterior, lo cual simplifica dicha acción. Tomar en cuenta que no todas las distribuciones GNU/Linux lo soporta:

find /tmp -size +3000k -delete

Ok, sé que es mucho más extenso hablar de find… de hecho, si ustedes verifican la ayuda del mismo (man find  ó  find –help) encontrarán que es sumamente extenso todo lo que se puede hacer con él; en fin, por lo menos las búsquedas más cotidianas se pueden hacer con lo que se ha compartido. Espero que les sea de utilidad.

¡Saludos!

 

Comentarios por Facebook

comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*