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
.txto.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.jpgFoto.jpgFOTO.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 normald→ directoriol→ 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→ bytesk→ kilobytesM→ megabytesG→ 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ón | Significado | Ejemplo |
|---|---|---|
. | Directorio actual | find . |
-name | Busca por nombre exacto respetando mayúsculas | find /home -name "foto.jpg" |
-iname | Busca por nombre ignorando mayúsculas | find /home -iname "foto.jpg" |
-type f | Solo archivos | find /home -type f |
-type d | Solo directorios | find /home -type d |
-type l | Solo enlaces simbólicos | find /home -type l |
-size | Busca por tamaño | find /home -size +100M |
-mtime | Busca por días desde modificación | find /home -mtime -7 |
-mmin | Busca por minutos desde modificación | find /home -mmin -60 |
-user | Busca por usuario propietario | find /home -user alumno1 |
-group | Busca por grupo propietario | find /home -group profesores |
-perm | Busca por permisos | find /home -perm 644 |
-empty | Busca archivos o directorios vacíos | find /home -empty |
-maxdepth | Limita profundidad máxima | find /home -maxdepth 2 |
-mindepth | Limita profundidad mínima | find /home -mindepth 1 |
-exec | Ejecuta un comando sobre cada resultado | find /home -name "*.txt" -exec ls -l {} \; |
-delete | Borra directamente los resultados | find /tmp -name "*.tmp" -delete |
-o | Operador OR | find /home -name "*.jpg" -o -name "*.png" |
! | Negación | find /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
| Ejercicio | Comando |
|---|---|
| 1 | find /home/$USER -type f -name "*.txt" |
| 2 | find /home -type d |
| 3 | find /home -type f -size +50M |
| 4 | find /home -type f -mtime -3 |
| 5 | find /home/$USER/pruebas -type f -empty |
| 6 | find /home -type f -name "*.log" |
| 7 | find /tmp -type f -name "*.tmp" y después find /tmp -type f -name "*.tmp" -delete |








