El comando find sigue siendo una de las herramientas más potentes de Linux para localizar archivos, pero limitarlo a buscar por nombre desaprovecha buena parte de sus posibilidades. Puede filtrar por tamaño, fechas, permisos, propietario, tipo de archivo o profundidad, detectar enlaces simbólicos rotos y ejecutar acciones sobre los resultados. Bien utilizado permite resolver desde tareas cotidianas hasta labores de mantenimiento y seguridad sin instalar herramientas adicionales.
Las claves del comando find en Linux en 30 segundos
findrecorre directorios y permite combinar criterios de nombre, tipo, tamaño, tiempo, usuario o permisos.- Opciones como
-mtime,-mmin,-sizey-permpermiten construir búsquedas muy precisas. -execejecuta comandos sobre los archivos encontrados, mientras-deletepuede eliminarlos directamente.- Los comodines como
*.logdeben protegerse normalmente con comillas. - Algunas opciones cambian entre GNU
findde Linux y las implementaciones BSD utilizadas en macOS.
La sintaxis básica es sencilla:
find RUTA EXPRESIÓN
Por ejemplo:
find /var/log -name "*.log"Lenguaje del código: JavaScript (javascript)
El comando comienza en /var/log, recorre sus subdirectorios y devuelve los archivos y directorios cuyo nombre termine en .log.
Pero find funciona mejor cuando se entiende como un pequeño lenguaje de consulta sobre el sistema de archivos. Los diferentes criterios pueden combinarse para responder preguntas como «¿qué archivos de más de 500 MB se modificaron durante los últimos siete días?» o «¿qué ejecutables pertenecientes a este usuario tienen permisos demasiado abiertos?».
Buscar por nombre, tipo y ubicación
El punto . representa el directorio actual:
find . -name "config.php"Lenguaje del código: JavaScript (javascript)
Busca cualquier objeto llamado exactamente config.php.
Para limitar los resultados exclusivamente a archivos normales se utiliza -type f:
find . -type f -name "config.php"Lenguaje del código: JavaScript (javascript)
Los principales tipos son:
| Expresión | Busca |
|---|---|
-type f | Archivos normales |
-type d | Directorios |
-type l | Enlaces simbólicos |
-type b | Dispositivos de bloques |
-type c | Dispositivos de caracteres |
-type p | FIFO o named pipes |
-type s | Sockets |
Para encontrar directorios:
find . -type d -name "cache"Lenguaje del código: JavaScript (javascript)
Una diferencia importante aparece entre -name e -iname.
find . -type f -name "*.jpg"Lenguaje del código: JavaScript (javascript)
distingue mayúsculas y minúsculas.
Por tanto podría localizar:
foto.jpgLenguaje del código: CSS (css)
pero no necesariamente:
FOTO.JPG
Foto.JPGLenguaje del código: CSS (css)
Para ignorar esa diferencia:
find . -type f -iname "*.jpg"Lenguaje del código: JavaScript (javascript)
Por qué conviene poner "*.jpg" entre comillas
Esta pequeña precaución evita muchos errores:
find . -name "*.jpg"Lenguaje del código: JavaScript (javascript)
Si se escribiera:
find . -name *.jpgLenguaje del código: CSS (css)
el propio shell podría expandir *.jpg antes de que find reciba el argumento.
Si el directorio actual contiene varios JPG, la orden final podría no ser la que esperaba el administrador.
Por eso es habitual proteger los patrones mediante comillas simples o dobles:
find . -name '*.jpg'Lenguaje del código: JavaScript (javascript)
Cómo buscar archivos por tamaño
find puede seleccionar archivos según el espacio que ocupan.
Para encontrar archivos de más de 100 MB:
find . -type f -size +100M
Para archivos menores:
find . -type f -size -10M
Y para establecer un intervalo:
find . -type f -size +100M -size -500M
Esta orden resulta especialmente útil para investigar sistemas que se están quedando sin almacenamiento.
Las principales unidades disponibles en GNU find son:
| Sufijo | Unidad |
|---|---|
c | bytes |
k | bloques de 1.024 bytes |
M | unidades de 1.048.576 bytes |
G | unidades de 1.073.741.824 bytes |
Por tanto:
-size +1G
busca objetos que superan el umbral expresado mediante unidades de 1 GiB, aunque la opción se escriba con G.
Una consulta típica para buscar grandes consumidores de almacenamiento podría ser:
find /var -type f -size +1GLenguaje del código: JavaScript (javascript)
Y para disponer también del tamaño:
find /var -type f -size +1G -exec ls -lh {} +Lenguaje del código: JavaScript (javascript)
Buscar por fecha: mtime, ctime y atime no significan lo mismo
Esta es una de las partes de find que más confusión provoca.
Linux mantiene varias marcas temporales relacionadas con un archivo.
| Opción | Qué representa |
|---|---|
-mtime | Modificación del contenido |
-ctime | Cambio de metadatos/inodo |
-atime | Último acceso |
-mmin | Modificación en minutos |
-cmin | Cambio de metadatos en minutos |
-amin | Acceso en minutos |
Para buscar archivos modificados durante aproximadamente las últimas 24 horas:
find . -type f -mtime -1
Para buscar modificaciones de los últimos 60 minutos:
find . -type f -mmin -60
Un ejemplo útil para administradores:
find /etc -type f -mmin -60
permite detectar archivos de configuración modificados recientemente.
ctime no es la fecha de creación
Una confusión habitual consiste en interpretar:
-ctime
como creation time.
No significa eso.
En los sistemas Unix tradicionales representa change time, relacionado con modificaciones en los metadatos del inodo.
Por ejemplo:
chmod 600 archivo
puede modificar el ctime aunque el contenido del archivo siga siendo exactamente el mismo.
Para encontrar archivos cuyos metadatos han cambiado recientemente:
find . -type f -ctime -2
Buscar entre dos fechas concretas
GNU find ofrece -newermt, muy cómodo para establecer límites temporales:
find . -type f -newermt "2026-09-01"Lenguaje del código: JavaScript (javascript)
Para establecer un intervalo:
find . -type f \
-newermt "2026-09-01" \
! -newermt "2026-09-10"Lenguaje del código: JavaScript (javascript)
Esto permite realizar investigaciones bastante más legibles que intentar convertir manualmente las fechas a números de días.
También puede tomarse otro archivo como referencia:
find . -type f -newer referencia.txtLenguaje del código: CSS (css)
Devuelve archivos más recientes que referencia.txt.
Encontrar archivos por permisos y propietario
find resulta especialmente útil en auditorías básicas de servidores.
Para localizar archivos que tengan exactamente permisos 777:
find . -type f -perm 0777
Para buscar archivos donde estén establecidos determinados bits puede utilizarse otra forma de -perm.
Por ejemplo, para localizar archivos con el bit SUID:
find / -type f -perm -4000 2>/dev/nullLenguaje del código: JavaScript (javascript)
El bit Set User ID (SUID) permite que determinados ejecutables se ejecuten con los privilegios de su propietario.
Eso no significa que todo archivo SUID sea peligroso. Herramientas legítimas del sistema pueden necesitarlo, pero conocer cuáles existen es útil durante una auditoría.
Para localizar archivos ejecutables por su propietario:
find . -type f -perm -u+x
También puede buscarse por usuario:
find /home -type f -user david
O por grupo:
find /srv -type f -group www-data
Otra consulta interesante después de eliminar una cuenta es buscar archivos cuyo usuario ya no existe:
find / -nouser 2>/dev/nullLenguaje del código: JavaScript (javascript)
Y para grupos desaparecidos:
find / -nogroup 2>/dev/nullLenguaje del código: JavaScript (javascript)
Detectar archivos vacíos y enlaces simbólicos rotos
Para encontrar archivos vacíos:
find . -type f -emptyLenguaje del código: PHP (php)
Para localizar directorios vacíos:
find . -type d -emptyLenguaje del código: PHP (php)
Puede servir para revisar directorios temporales, aplicaciones mal configuradas o estructuras que han quedado abandonadas.
Los enlaces simbólicos también pueden localizarse fácilmente:
find . -type l
Pero existe una diferencia entre encontrar cualquier enlace y encontrar únicamente aquellos cuyo destino ya no existe.
Con GNU find:
find . -xtype l
es una forma habitual de detectar enlaces simbólicos rotos.
Una auditoría de /var/www podría ser:
find /var/www -xtype lLenguaje del código: JavaScript (javascript)
El detalle es importante porque -type l por sí solo no significa «enlace roto»: devuelve enlaces simbólicos independientemente de que su destino sea válido.
Controlar hasta dónde busca find
Por defecto, find desciende recursivamente.
Si se quiere consultar únicamente el directorio actual:
find . -maxdepth 1 -type f
Por ejemplo:
find /etc -maxdepth 1 -type f
no recorrerá /etc/nginx, /etc/ssh y el resto de subdirectorios.
También existe -mindepth.
find . -mindepth 2
excluye los elementos de los niveles iniciales.
Ambas opciones pueden combinarse:
find /srv \
-mindepth 2 \
-maxdepth 4 \
-type f
Esto resulta útil en árboles especialmente grandes donde una búsqueda recursiva completa puede ser innecesaria.
-exec: cuando find empieza a hacer cosas con los resultados
Encontrar un archivo suele ser solamente el primer paso.
-exec permite ejecutar otro comando sobre lo encontrado.
Por ejemplo:
find . -type f -name "*.txt" -exec cat {} \;Lenguaje del código: CSS (css)
Aquí {} representa cada ruta encontrada.
El terminador:
\;
hace que el comando se ejecute individualmente para cada resultado.
Existe una alternativa normalmente más eficiente:
find . -type f -name "*.txt" -exec cat {} +Lenguaje del código: CSS (css)
El + permite agrupar múltiples nombres y pasarlos conjuntamente al programa cuando sea posible.
Por ejemplo, para modificar permisos de todos los .txt:
find . -type f -name "*.txt" -exec chmod 644 {} +Lenguaje del código: CSS (css)
O buscar la palabra ERROR dentro de archivos de registro:
find /var/log -type f -name "*.log" \
-exec grep -H "ERROR" {} +Lenguaje del código: JavaScript (javascript)
-exec con {} no es texto mágico del shell
Las llaves representan el nombre del elemento encontrado para find.
Esta orden:
find . -type f -name "*.conf" \
-exec ls -l {} \;Lenguaje del código: CSS (css)
podría terminar ejecutando conceptualmente:
ls -l ./app.conf
ls -l ./nginx/site.conf
ls -l ./backup/old.conf
Con {} +, en cambio, find intentaría agruparlos:
ls -l ./app.conf ./nginx/site.conf ./backup/old.conf
Esto puede reducir considerablemente el número de procesos creados cuando existen miles de resultados.
Mover archivos: cuidado con una sintaxis muy común
Para mover todos los PNG a /tmp podría utilizarse:
find . -type f -name "*.png" \
-exec mv -t /tmp -- {} +Lenguaje del código: JavaScript (javascript)
Esa forma depende de GNU mv.
Una alternativa más portable:
find . -type f -name "*.png" \
-exec mv {} /tmp/ \;Lenguaje del código: JavaScript (javascript)
Pero hay que tener cuidado: si diferentes directorios contienen archivos con el mismo nombre, moverlos todos al mismo destino puede provocar conflictos.
Además, buscar desde . mientras el destino forma parte del propio árbol puede generar comportamientos que deberían estudiarse previamente.
-delete: potente y peligroso
find también puede borrar directamente.
Para eliminar archivos .tmp:
find . -type f -name "*.tmp" -deleteLenguaje del código: JavaScript (javascript)
O directorios vacíos:
find . -type d -empty -deleteLenguaje del código: JavaScript (javascript)
También podrían eliminarse enlaces rotos:
find . -xtype l -deleteLenguaje del código: JavaScript (javascript)
Pero -delete merece una regla sencilla:
primero ejecutar exactamente la misma búsqueda sin -delete.
Es decir, antes de:
find /srv -type f -name "*.tmp" -deleteLenguaje del código: JavaScript (javascript)
ejecutar:
find /srv -type f -name "*.tmp"Lenguaje del código: JavaScript (javascript)
y revisar cuidadosamente la salida.
Con find no existe una papelera intermedia. Un criterio mal construido puede eliminar miles de archivos en segundos.
AND, OR y NOT: combinar condiciones
Cuando se escriben varios criterios consecutivos, find aplica normalmente un AND implícito.
find . -type f -name "*.log" -size +100MLenguaje del código: JavaScript (javascript)
significa:
archivo normal Y nombre terminado en
.logY tamaño superior a 100 MB.
Para realizar un OR puede utilizarse -o:
find . -type f \( -name "*.jpg" -o -name "*.png" \)Lenguaje del código: JavaScript (javascript)
Busca JPG o PNG.
Los paréntesis se escapan porque, de otro modo, serían interpretados por el shell.
Para negar una condición:
find . -type f ! -name "*.log"Lenguaje del código: JavaScript (javascript)
devuelve archivos que no terminan en .log.
Un ejemplo más real:
find /var/www \
-type f \
\( -name "*.php" -o -name "*.js" \) \
-mtime -7Lenguaje del código: JavaScript (javascript)
localiza PHP o JavaScript modificados recientemente.
30 ejemplos útiles de find
| Objetivo | Comando |
|---|---|
| Buscar un archivo | find . -type f -name "archivo.txt" |
| Buscar JPG | find . -type f -name "*.jpg" |
| Ignorar mayúsculas | find . -type f -iname "*.jpg" |
| Buscar directorios | find . -type d -name "backup" |
| Archivos vacíos | find . -type f -empty |
| Directorios vacíos | find . -type d -empty |
| Más de 100 MB | find . -type f -size +100M |
| Entre 100 y 500 MB | find . -type f -size +100M -size -500M |
| Modificados recientemente | find . -type f -mtime -1 |
| Modificados en 60 minutos | find . -type f -mmin -60 |
| Accedidos en una hora | find . -type f -amin -60 |
| Cambio de metadatos | find . -type f -ctime -2 |
| Más nuevos que otro archivo | find . -type f -newer ref.txt |
| Desde una fecha | find . -type f -newermt "2026-09-01" |
| Buscar usuario | find . -type f -user david |
| Buscar grupo | find . -type f -group www-data |
| Sin usuario válido | find / -nouser |
| Permisos 777 exactos | find . -type f -perm 0777 |
| Buscar SUID | find / -type f -perm -4000 |
| Ejecutables por propietario | find . -type f -perm -u+x |
| Enlaces simbólicos | find . -type l |
| Enlaces rotos | find . -xtype l |
| Solo nivel actual | find . -maxdepth 1 -type f |
| Mostrar detalles | find . -type f -exec ls -lh {} + |
| Buscar texto | find . -name "*.txt" -exec grep -H "ERROR" {} + |
| Cambiar permisos | find . -name "*.txt" -exec chmod 644 {} + |
Eliminar .tmp | find . -type f -name "*.tmp" -delete |
| Borrar carpetas vacías | find . -type d -empty -delete |
| Buscar JPG o PNG | find . -type f \( -name "*.jpg" -o -name "*.png" \) |
Excluir .git | find . -path "./.git" -prune -o -type f -print |
find frente a locate, fd y grep
find tampoco es la única herramienta disponible.
| Herramienta | Para qué destaca |
|---|---|
find | Búsquedas precisas sobre el sistema de archivos |
locate | Encontrar nombres muy rápidamente mediante una base indexada |
fd | Alternativa moderna y cómoda para búsquedas habituales |
grep | Buscar contenido dentro de archivos |
ripgrep (rg) | Búsqueda de texto muy rápida, especialmente en código |
locate puede ser extraordinariamente rápido porque no necesita recorrer el disco en cada consulta, pero su base de datos puede no reflejar archivos creados hace unos minutos.
fd, disponible en numerosas distribuciones aunque normalmente no instalado por defecto, ofrece una interfaz más sencilla para muchas búsquedas cotidianas.
Por ejemplo:
fd '\.jpg$'Lenguaje del código: JavaScript (javascript)
puede resultar más cómodo que construir algunas expresiones de find.
Sin embargo, cuando se necesitan condiciones avanzadas, permisos, propietarios, tiempos, profundidad, ejecución de comandos o compatibilidad con servidores Linux mínimos, GNU find sigue siendo una de las herramientas fundamentales del administrador de sistemas.
También hay que recordar que muchos ejemplos de Internet están pensados específicamente para GNU findutils, habitual en Linux. BSD find, utilizado en sistemas como macOS, comparte gran parte de la sintaxis pero no todas las extensiones. Opciones como -newermt o ciertos comportamientos pueden requerir alternativas distintas.
Aprender find no consiste por tanto en memorizar decenas de comandos. Lo realmente útil es entender sus piezas: dónde buscar, qué condiciones aplicar y qué hacer con los resultados. Con esas tres ideas se pueden construir consultas mucho más interesantes que cualquier colección fija de ejemplos.
Preguntas frecuentes
¿Cómo buscar un archivo por nombre en todo Linux?
Puede utilizarse find / -type f -name "archivo.txt", aunque recorrer todo el sistema puede requerir permisos elevados y generar mensajes de acceso denegado.
¿Cómo encontrar los archivos más grandes con find?
Para localizar archivos de más de 1 GB puede utilizarse find /ruta -type f -size +1G. Después puede combinarse con -exec ls -lh {} + para mostrar sus tamaños.
¿Qué diferencia hay entre -mtime y -ctime?
-mtime se refiere a modificaciones del contenido, mientras -ctime registra cambios del estado o metadatos del archivo. ctime no significa fecha de creación.
¿Es seguro utilizar find -delete?
Puede utilizarse con seguridad si el criterio está bien construido, pero conviene ejecutar primero la búsqueda sin -delete y revisar los resultados. Un error en la expresión puede provocar borrados masivos sin pasar por una papelera.







