find con Bash

Comando find para Linux

El comando find de Linux se utiliza para buscar archivos y directorios en nuestro sistema de archivos. Es increíblemente útil y potente realizando búsquedas con diferentes criterios: nombre del archivo, tamaño, fecha, etc.

Cuando realizamos una búsqueda con el comando find, el punto . representa al directorio actual.

Podríamos decir que las combinaciones posibles para realizar búsquedas con find son casi infinitas, por esta razón veremos algunas de las más utilizadas, el resto toca investigarlas.

find [ruta] [opciones] [expresión]

Cuando realizamos una búsqueda con el comando find por defecto busca ficheros y directorios, si necesitamos que únicamente busque un tipo debemos especificárselo con -type f para ficheros y -type d para directorios.

Búsquedas básicas con find -name

Vamos a empezar por búsquedas muy sencillas utilizando el comando find de Linux.

El primer ejemplo será una búsqueda en el directorio actual por el nombre de archivo.

  • find → hace referencia al comando de buscar.
  • . → hace referencia al directorio activo (en el que estamos ubicados).
  • -name → búsqueda por nombre.
  • «fecha.txt» → nombre del fichero a buscar.
find . -name "fecha.txt"

Ahora realizaremos la búsqueda para todos los ficheros que existan con extensión .txt.

find . -name "*.txt"
Buscando archivo con el comando find -name

Para buscar en otro directorio tendremos que sustituir el punto . por la ruta en la que deseemos buscar.

En este ejemplo, realizaremos una búsqueda de todos los archivos que existan dentro de la carpeta Desktop de nuestro usuario que tengan extensión .txt.

  • find → hace referencia al comando de buscar.
  • ~/Desktop → hace referencia a la ruta en la que buscaremos.
  • -name → búsqueda por nombre.
  • «*.txt» → todos los archivos con extensión .txt.

No olvidemos que el símbolo de virgulilla ~ hace referencia a mi carpeta de usuario. Es decir, el símbolo ~ es el equivalente a /home/mi_usuario. Por esta razón el resultado de los dos códigos siguientes son idénticos, podemos usar el que más nos guste.

find ~/Desktop -name "*.txt"
find /home/kali/Desktop -name "*.txt"

Búsquedas con find basadas en el tiempo

Las búsquedas con find basadas en el tiempo pueden ser de varios tipos. Unas teniendo en cuenta la antigüedad y otras teniendo en cuenta el tiempo transcurrido desde ciertos eventos (a de acceso, c de change y m de modificación).

  • -amin n: el último acceso al fichero fue hace n minutos.
  • -atime n: el último acceso al fichero fue hace n * 24 horas.
  • -cmin n: el último cambio del fichero fue hace n minutos.
  • -ctime n: el último cambio del fichero fue hace n * 24 horas.
  • -mmin n: la última vez que se modificó el fichero fue hace n minutos.
  • -mtime n: la última vez que se modificó el fichero fue hace n * 24 horas.

El valor de n (sin signo) hace referencia a un número exacto de minutos o de horas que han pasado, se lo indicamos escribiendo n. Cuando queremos hacer referencia a ese valor de n pero incluyendo también n o menos de n, colocamos el signo menos delante de n, quedando así -n. Si queremos hacer referencia a n o más de n lo hacemos con el signo mas +, quedando así +n.

Puede parecer un trabalenguas, pero es muy sencillo. Lo veremos más claro de esta forma.

  • find -mmin 2: mostrará los ficheros que se hayan modificado hace dos minutos.
  • find -mmin -2: mostrará los ficheros que se hayan modificado hace dos minutos o menos de dos minutos.
  • find -mmin +2: mostrará los ficheros que se hayan modificado hace dos minutos o más.

Cada opción que agregamos al comando del estilo a -mmin hace referencia a m (modificación) min (minutos), podría ser también amin y se trataría de a (acceso) min (minutos).
También cmin con c (change) y min (minutos), o atime siendo a (acceso) time (días).

Todo va a depender de si buscamos minutos o días. De si buscamos que el valor sea exacto, mayor o menor de n y del tipo de evento que tratemos de localizar, acceso, cambio o modificación.

Entendiendo cambio de fichero por realizar modificación en el nombre, ubicación, permisos, propietario o grupo y modificación de fichero por modificar o alterar el contenido del mismo.

Búsquedas con find basadas en el tamaño

Cuando realizamos búsquedas con el comando find de Linux basándonos en el tamaño del archivo o directorio utilizamos la opción -size n y podemos especificar las unidades en bytes (nc), kilobytes (nk), megabytes (nM).

  • -size 200c: archivo o directorio de 200 bytes.
  • -size 200k: archivo o directorio de 200 kilobytes.
  • -size 2M: archivo o directorio de 2 megas.

De la misma forma que pasaba con las unidades de tiempo, podemos indicar que el tamaño sea mayor que n o menor que n con los signos de más y menos.

  • -size -100c: archivo o directorio menor de 100 bytes.
  • -size +400k: archivo o directorio mayor de 400 kilobytes.
  • -size +12M: archivo o directorio mayor de 12 megas.

Vamos a ver un ejemplo realizando tres búsqueda de ficheros únicamente, sin incluir directorios. Para esto debemos especificar en la búsqueda -type f (solo ficheros).

find . -type f -size 100M
find . -type f -size -300c
find . -type f -size +400k

Con el operador lógico -a AND podemos combinar todo lo que se nos ocurra, tanto en tamaños como en tiempos.

Vamos a ver un ejemplo de búsqueda con tamaños. Buscaremos en el directorio actual, ficheros que su tamaño sea mayor de 100 megas y menor de 300 megas. Después haremos un ls -lh para que nos indique entre otras cosas su tamaño en megas.

find . -type f -size +100M -a -size -300M
Búsqueda de ficheros con el comando find de un tamaño mayor de 100M y menor de 300M

Búsquedas con find basadas en el usuario propietario

Otra posibilidad que nos brinda el comando de búsqueda find es buscar por el propietario del fichero o directorio.

Búsqueda de ficheros en los que el propietario sea el usuario root.

find . -type f -user root

Combinación de opciones en las búsquedas

Vamos a ver algunos ejemplos de cómo combinar opciones para realizar búsquedas mucho más potentes.

Ficheros del directorio actual que tengan como propietario al usuario kali y (-a AND) su peso sea mayor de 10 megas.

find . -type f -user kali -a -size +10M

Ficheros del directorio actual que tengan como propietario al root o kali y su peso sea mayor de 100 bytes. Para trabajar con el operador -o (OR) debemos introducir las condiciones entre paréntesis escapados dejando un espacio.

En este ejemplo incluiremos -a AND y -o OR.

find . -type f \( -user kali -a -size +100M \) -o \( -user root -o -size +100M \)

Puede parecer un poco mandarín el comando pero lo analizaremos paso a paso para ver lo sencillo que es si lo pensamos por partes.

# Busca en el directorio actual ficheros
find . -type f 

# del usuario kali con tamaño superior a 100 megas.
\( -user kali -a -size +100M \) 

# hago uso del OR
-o 

# del usuario root con tamaño mayor a 100 megas.
\( -user root -o -size +100M \) 

Para rizar el rizo un poco más podríamos decirle a este mismo comando que el resultado nos lo guardase en un fichero nuevo llamado salida.txt.

Para hacer esto agregaremos al final del comando > salida.txt

find . -type f \( -user kali -a -size +100M \) -o \( -user root -o -size +100M \) > salida.txt

Mostraremos el contenido del fichero creado mediante cat.

Búsqueda de ficheros con el comando find haciendo uso de los condicionales -a AND y -o OR

Jugar mucho con este comando es indispensable para ver todo el potencial que tiene. Existen muchas más opciones para incluir en nuestras búsquedas, se pueden consultar desde nuestro terminal ejecutando man find o desde el sitio de la documentación oficial.

Dejar un comentario

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