1.5 – Comando find en Ubuntu

El comando find es una de las herramientas más potentes de Linux para buscar archivos y directorios dentro del sistema.

A diferencia de otros comandos más simples, find no solo permite localizar elementos por su nombre, sino también filtrarlos por muchas otras características, como por ejemplo:

  • nombre
  • tipo de archivo
  • tamaño
  • fecha de modificación
  • usuario propietario
  • permisos
  • contenido combinado con otros comandos
  • y mucho más

Es un comando muy útil tanto para tareas cotidianas como para administración de sistemas, automatización y mantenimiento.


¿Para qué sirve find?

find se utiliza para recorrer directorios y buscar elementos que cumplan unas condiciones concretas.

Algunos usos habituales son:

  • localizar un archivo cuyo nombre no recordamos bien
  • buscar todos los archivos .txt o .log
  • encontrar carpetas concretas
  • detectar archivos grandes
  • localizar archivos modificados recientemente
  • buscar archivos vacíos
  • combinar la búsqueda con acciones automáticas, como borrar o ejecutar otro comando

Sintaxis básica

find [ruta] [condiciones]

Estructura

  • ruta: lugar desde el que comienza la búsqueda
  • condiciones: filtros que debe cumplir el archivo o directorio

Ejemplo mínimo

find /home

Este comando recorre todo el directorio /home y muestra todo lo que encuentra: archivos, carpetas, enlaces, etc.


Primeros ejemplos sencillos

Buscar en el directorio actual

find .

El punto . significa directorio actual.

Buscar dentro de /home

find /home

Buscar un archivo por nombre exacto

find /home -name "documento.txt"

Busca un archivo llamado exactamente documento.txt.


Buscar por nombre

Opción -name

Permite buscar por nombre respetando mayúsculas y minúsculas.

find /home -name "foto.jpg"

Esto encontrará solo archivos o directorios con ese nombre exacto.

Opción -iname

Permite buscar ignorando mayúsculas y minúsculas.

find /home -iname "foto.jpg"

Esto encontraría:

  • foto.jpg
  • Foto.jpg
  • FOTO.JPG

Muy útil cuando no recordamos bien cómo estaba escrito el nombre.


Uso de comodines

find permite usar comodines entre comillas.

Buscar todos los archivos .txt

find /home -name "*.txt"

Buscar todos los archivos .log

find /var/log -name "*.log"

Buscar nombres que empiecen por “tema”

find /home -name "tema*"

Buscar nombres que terminen en “2025”

find /home -name "*2025"

Buscar por tipo

Con la opción -type podemos indicar qué queremos encontrar.

Tipos más usados

  • f → archivo normal
  • d → directorio
  • l → enlace simbólico

Buscar solo archivos

find /home -type f

Buscar solo directorios

find /home -type d

Buscar solo enlaces simbólicos

find /home -type l

Buscar archivos .pdf

find /home -type f -name "*.pdf"

Aquí combinamos dos condiciones:

  • que sea archivo
  • que termine en .pdf

Buscar por tamaño

La opción -size permite buscar por tamaño.

Unidades comunes

  • c → bytes
  • k → kilobytes
  • M → megabytes
  • G → gigabytes

Ejemplos

Buscar archivos de exactamente 10 MB

find /home -type f -size 10M

Buscar archivos mayores de 100 MB

find /home -type f -size +100M

Buscar archivos menores de 1 MB

find /home -type f -size -1M

El signo cambia mucho la película:

  • 10M → exactamente 10 MB
  • +10M → más de 10 MB
  • -10M → menos de 10 MB

Buscar por fecha

find también puede buscar según el momento en que un archivo fue modificado.

Opción -mtime

Busca por días desde la última modificación.

Archivos modificados hace menos de 7 días

find /home -type f -mtime -7

Archivos modificados hace más de 30 días

find /home -type f -mtime +30

Archivos modificados exactamente hace 1 día

find /home -type f -mtime 1

Opción -mmin

Busca por minutos desde la última modificación.

Archivos modificados en los últimos 60 minutos

find /home -type f -mmin -60

Esto es muy útil para tareas recientes o diagnósticos.


Buscar por usuario o grupo

Buscar archivos de un usuario concreto

find /home -user alumno1

Buscar archivos de un grupo concreto

find /home -group profesores

Esto puede venir muy bien en sistemas multiusuario.


Buscar por permisos

La opción -perm permite localizar archivos con permisos específicos.

Buscar archivos con permiso 644

find /home -type f -perm 644

Buscar directorios con permiso 755

find /home -type d -perm 755

Esto es útil para revisar seguridad, configuraciones o errores de permisos.


Buscar archivos vacíos

Archivos vacíos

find /home -type f -empty

Directorios vacíos

find /home -type d -empty

Muy útil para limpieza del sistema o revisión de estructuras.


Limitar la profundidad de búsqueda

A veces no queremos que find recorra infinitamente subcarpetas como si estuviera poseído por un espíritu del caos. Para eso usamos estas opciones.

-maxdepth

Limita cuántos niveles de profundidad puede bajar.

find /home -maxdepth 1

Muestra solo lo que hay en /home sin entrar en subdirectorios.

-mindepth

Indica desde qué nivel empezar a mostrar resultados.

find /home -mindepth 1

Evita mostrar el directorio inicial.

Ejemplo combinado

find /home -mindepth 1 -maxdepth 2 -type f

Busca archivos desde el primer nivel hasta el segundo.


Ejecutar acciones con los resultados

Una de las funciones más potentes de find es usar -exec, que permite ejecutar comandos sobre cada resultado encontrado.

Sintaxis

find [ruta] [condición] -exec comando {} \;
  • {} representa el archivo encontrado
  • \; indica el final del comando

Ejemplo: mostrar información detallada

find /home -name "*.txt" -exec ls -l {} \;

Ejemplo: borrar archivos

find /home -type f -name "*.tmp" -exec rm {} \;

Cuidado con esto. Aquí ya estamos jugando con fuego elegante.

Ejemplo: cambiar permisos

find /home/proyecto -type f -name "*.sh" -exec chmod +x {} \;

Borrar directamente con -delete

También se puede borrar sin usar -exec.

find /home -type f -name "*.tmp" -delete

Esto es muy útil, pero también peligroso si no hemos probado antes la búsqueda.

Recomendación importante

Primero ejecuta la búsqueda sin borrar:

find /home -type f -name "*.tmp"

Y cuando compruebes que el resultado es correcto, entonces usas:

find /home -type f -name "*.tmp" -delete

Combinar varias condiciones

find permite combinar condiciones para hacer búsquedas mucho más precisas.

Buscar archivos .log de más de 10 MB

find /var/log -type f -name "*.log" -size +10M

Buscar archivos .txt modificados en los últimos 2 días

find /home -type f -name "*.txt" -mtime -2

Buscar directorios vacíos

find /home -type d -empty

Uso de operadores lógicos

Opción -o (OR)

Busca una cosa o la otra.

find /home -name "*.jpg" -o -name "*.png"

Busca archivos .jpg o .png.

Opción ! (NOT)

Niega una condición.

find /home -type f ! -name "*.txt"

Busca archivos que no terminen en .txt.


Ejemplos prácticos

1. Buscar todos los archivos PDF de un usuario

find /home/alumno -type f -name "*.pdf"

2. Buscar carpetas llamadas backup

find /home -type d -name "backup"

3. Buscar archivos grandes en todo el sistema

find / -type f -size +500M

4. Buscar archivos modificados hoy aproximadamente

find /home -type f -mtime -1

5. Buscar archivos temporales y eliminarlos

find /tmp -type f -name "*.tmp" -delete

6. Buscar scripts de shell

find /home -type f -name "*.sh"

7. Buscar directorios vacíos dentro del proyecto

find /home/proyecto -type d -empty

Buenas prácticas al usar find

1. Empezar por una ruta concreta

No uses / si no hace falta. Buscar desde la raíz puede tardar bastante y además mostrar errores por falta de permisos.

Mejor algo como:

find /home/usuario/documentos -name "*.txt"

2. Probar primero antes de borrar

Antes de usar -delete o -exec rm, ejecuta la búsqueda sin borrar nada.

3. Usar comillas en los patrones

Correcto:

find /home -name "*.txt"

No recomendable:

find /home -name *.txt

Sin comillas, el shell puede interpretar el patrón antes que find, y ahí empiezan los disgustos.

4. Combinar condiciones para ser más preciso

Cuanto más concreta sea la búsqueda, menos resultados basura tendrás.


Errores comunes

Error 1: olvidar la ruta

find -name "*.txt"

Aunque puede funcionar en algunos casos desde el directorio actual, es mejor escribirlo claramente:

find . -name "*.txt"

Error 2: no poner comillas

find /home -name *.txt

Puede dar resultados inesperados.

Error 3: usar -delete sin comprobar antes

Esto puede eliminar archivos importantes. Linux no te va a mirar con pena. Simplemente lo hará.

Error 4: confundir -name con contenido del archivo

find busca por nombre, tamaño, fechas, tipo, etc., pero no busca texto dentro de archivos.
Para buscar texto dentro de archivos se usa normalmente grep.

Ejemplo combinado:

find /home -type f -name "*.txt" -exec grep "error" {} \;

Opciones principales de find

OpciónSignificadoEjemplo
.Directorio actualfind .
-nameBusca por nombre exacto respetando mayúsculasfind /home -name "foto.jpg"
-inameBusca por nombre ignorando mayúsculasfind /home -iname "foto.jpg"
-type fSolo archivosfind /home -type f
-type dSolo directoriosfind /home -type d
-type lSolo enlaces simbólicosfind /home -type l
-sizeBusca por tamañofind /home -size +100M
-mtimeBusca por días desde modificaciónfind /home -mtime -7
-mminBusca por minutos desde modificaciónfind /home -mmin -60
-userBusca por usuario propietariofind /home -user alumno1
-groupBusca por grupo propietariofind /home -group profesores
-permBusca por permisosfind /home -perm 644
-emptyBusca archivos o directorios vacíosfind /home -empty
-maxdepthLimita profundidad máximafind /home -maxdepth 2
-mindepthLimita profundidad mínimafind /home -mindepth 1
-execEjecuta un comando sobre cada resultadofind /home -name "*.txt" -exec ls -l {} \;
-deleteBorra directamente los resultadosfind /tmp -name "*.tmp" -delete
-oOperador ORfind /home -name "*.jpg" -o -name "*.png"
!Negaciónfind /home ! -name "*.txt"


Ejercicios

Ejercicio 1

Busca todos los archivos .txt dentro de tu carpeta personal.

Ejercicio 2

Busca todos los directorios dentro de /home.

Ejercicio 3

Encuentra archivos mayores de 50 MB.

Ejercicio 4

Busca archivos modificados en los últimos 3 días.

Ejercicio 5

Busca archivos vacíos dentro de una carpeta de pruebas.

Ejercicio 6

Busca todos los archivos .log y muestra solo los que sean archivos normales.

Ejercicio 7

Busca archivos .tmp dentro de una carpeta temporal y elimínalos solo después de comprobar el resultado.



Soluciones

EjercicioComando
1find /home/$USER -type f -name "*.txt"
2find /home -type d
3find /home -type f -size +50M
4find /home -type f -mtime -3
5find /home/$USER/pruebas -type f -empty
6find /home -type f -name "*.log"
7find /tmp -type f -name "*.tmp" y después find /tmp -type f -name "*.tmp" -delete