Linux find: guía práctica con 30 comandos para buscar archivos como un administrador

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

  • find recorre directorios y permite combinar criterios de nombre, tipo, tamaño, tiempo, usuario o permisos.
  • Opciones como -mtime, -mmin, -size y -perm permiten construir búsquedas muy precisas.
  • -exec ejecuta comandos sobre los archivos encontrados, mientras -delete puede eliminarlos directamente.
  • Los comodines como *.log deben protegerse normalmente con comillas.
  • Algunas opciones cambian entre GNU find de 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ónBusca
-type fArchivos normales
-type dDirectorios
-type lEnlaces simbólicos
-type bDispositivos de bloques
-type cDispositivos de caracteres
-type pFIFO o named pipes
-type sSockets

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:

SufijoUnidad
cbytes
kbloques de 1.024 bytes
Munidades de 1.048.576 bytes
Gunidades 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ónQué representa
-mtimeModificación del contenido
-ctimeCambio de metadatos/inodo
-atimeÚltimo acceso
-mminModificación en minutos
-cminCambio de metadatos en minutos
-aminAcceso 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 .log Y 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

ObjetivoComando
Buscar un archivofind . -type f -name "archivo.txt"
Buscar JPGfind . -type f -name "*.jpg"
Ignorar mayúsculasfind . -type f -iname "*.jpg"
Buscar directoriosfind . -type d -name "backup"
Archivos vacíosfind . -type f -empty
Directorios vacíosfind . -type d -empty
Más de 100 MBfind . -type f -size +100M
Entre 100 y 500 MBfind . -type f -size +100M -size -500M
Modificados recientementefind . -type f -mtime -1
Modificados en 60 minutosfind . -type f -mmin -60
Accedidos en una horafind . -type f -amin -60
Cambio de metadatosfind . -type f -ctime -2
Más nuevos que otro archivofind . -type f -newer ref.txt
Desde una fechafind . -type f -newermt "2026-09-01"
Buscar usuariofind . -type f -user david
Buscar grupofind . -type f -group www-data
Sin usuario válidofind / -nouser
Permisos 777 exactosfind . -type f -perm 0777
Buscar SUIDfind / -type f -perm -4000
Ejecutables por propietariofind . -type f -perm -u+x
Enlaces simbólicosfind . -type l
Enlaces rotosfind . -xtype l
Solo nivel actualfind . -maxdepth 1 -type f
Mostrar detallesfind . -type f -exec ls -lh {} +
Buscar textofind . -name "*.txt" -exec grep -H "ERROR" {} +
Cambiar permisosfind . -name "*.txt" -exec chmod 644 {} +
Eliminar .tmpfind . -type f -name "*.tmp" -delete
Borrar carpetas vacíasfind . -type d -empty -delete
Buscar JPG o PNGfind . -type f \( -name "*.jpg" -o -name "*.png" \)
Excluir .gitfind . -path "./.git" -prune -o -type f -print

find frente a locate, fd y grep

find tampoco es la única herramienta disponible.

HerramientaPara qué destaca
findBúsquedas precisas sobre el sistema de archivos
locateEncontrar nombres muy rápidamente mediante una base indexada
fdAlternativa moderna y cómoda para búsquedas habituales
grepBuscar 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.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×