Sysadmin

Comando find Linux: 20 Ejemplos Prácticos

Comando find Linux: 20 Ejemplos Prácticos

El comando find en Linux es una herramienta fundamental para cualquier sysadmin, una verdadera navaja suiza para la gestión de sistemas de archivos. No se trata solo de localizar un archivo por nombre, sino de escanear jerarquías de directorios completas para identificar elementos basados en criterios complejos como tamaño, fecha de modificación, propietario, permisos, e incluso ejecutar acciones sobre los resultados. En entornos empresariales, donde se gestionan miles de servidores y millones de archivos, dominar find significa optimizar tiempos, automatizar procesos de limpieza, identificar problemas de espacio o seguridad, y reaccionar rápidamente a incidentes. Su versatilidad lo hace indispensable para auditorías, resolución de problemas y mantenimiento preventivo, permitiendo pasar de una operación manual y costosa a una ejecución precisa y escalable.

Tested on: Ubuntu 24.04 LTS · CentOS Stream 9 · Debian 12 · Octubre 2026

Requisitos Previos / Entorno de Prueba

Para seguir esta guía, necesitarás un sistema operativo Linux (Ubuntu, Debian, CentOS, RHEL o cualquier otra distribución compatible) con acceso a un terminal. No se requieren paquetes adicionales, ya que find es un comando estándar presente en todas las instalaciones de Linux. Es aconsejable ejecutar los comandos en un entorno de prueba o con directorios y archivos de ejemplo para evitar modificaciones no deseadas en sistemas en producción, especialmente cuando se utilizan opciones como -delete o -exec con comandos modificadores. Asegúrate de tener permisos de lectura para los directorios sobre los que pretendes realizar las búsquedas; para algunas operaciones, podrían ser necesarios los permisos de root o el uso de sudo.

Sintaxis Básica de find

La sintaxis general del comando find es find [ruta] [expresión]. La ruta especifica el directorio de inicio para la búsqueda, mientras que la expresión define los criterios de búsqueda y las acciones a ejecutar. Si se omite la ruta, find asume el directorio actual (.). La expresión se compone de opciones, pruebas, acciones y operadores.

Aquí tienes un ejemplo sencillo para empezar:

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

Este comando busca todos los archivos con extensión .log dentro del directorio /var/log y sus subdirectorios. La opción -name distingue entre mayúsculas y minúsculas. Si quieres una búsqueda que no distinga entre mayúsculas y minúsculas, puedes usar -iname.

Buscar por Nombre y por Extensión

Además de -name e -iname, puedes usar comodines como * (cualquier secuencia de caracteres) y ? (cualquier carácter individual). Es una buena práctica encerrar los patrones entre comillas para evitar que la shell los interprete.

Para encontrar todos los archivos .conf en el directorio /etc:

find /etc -name "*.conf"

Para encontrar archivos llamados informe (sin distinguir mayúsculas/minúsculas):

find /home -iname "informe*"

Lee también: Hardening SSH en Linux: Guía Completa 2026

Encontrar Archivos Más Grandes que un Tamaño Determinado

Esta es una funcionalidad crucial para la gestión del espacio en disco. La opción -size permite especificar el tamaño. El prefijo + indica ‘más grande que’, - indica ‘más pequeño que’, y la ausencia de prefijo indica ‘exactamente’. Las unidades de medida incluyen c (bytes), k (kilobytes), M (megabytes), G (gigabytes).

Para encontrar todos los archivos más grandes de 1GB, excluyendo los sistemas de archivos montados (-xdev) y suprimiendo los errores de permiso (2>/dev/null):

find / -xdev -type f -size +1G 2>/dev/null

Para encontrar archivos exactamente de 100MB:

find /tmp -type f -size 100M

Archivos Modificados en los Últimos Días (mtime, mmin, newer)

Las opciones -mtime (modified time) y -mmin (modified minutes) se usan para filtrar archivos basándose en la última modificación. Aquí también, + significa ‘más de N’, - significa ‘menos de N’, y la ausencia de prefijo ‘exactamente N’.

Para encontrar archivos modificados hace más de 30 días en el directorio /tmp:

find /tmp -type f -mtime +30

Para encontrar archivos modificados en los últimos 60 minutos:

find /var/log -type f -mmin -60

La opción -newer es útil para comparar la fecha de modificación de un archivo con la de otro archivo de referencia.

Para encontrar archivos modificados más recientemente que /etc/passwd:

find /etc -newer /etc/passwd

Buscar por Propietario y Permisos

Las opciones -user, -group y -perm son esenciales para los controles de seguridad y la gestión de accesos.

Para encontrar todos los archivos propiedad del usuario mario en su directorio home:

find /home -user mario

Para encontrar archivos propiedad del grupo www-data:

find /var/www -group www-data

Con -perm, puedes especificar los permisos en formato octal. -perm MODO busca archivos con permisos EXACTAMENTE MODO. -perm -MODO busca archivos con AL MENOS los permisos MODO (todos los bits de MODO deben estar establecidos). -perm /MODO busca archivos con AL MENOS UNO de los bits de MODO establecidos.

Para encontrar archivos con permisos 644:

find . -type f -perm 644

Para encontrar archivos ejecutables por todos (+x):

find . -type f -perm /111

Encontrar Archivos SUID: Un Control de Seguridad

Los archivos SUID (Set User ID) son archivos ejecutables que, cuando se ejecutan, asumen temporalmente los permisos del propietario del archivo (a menudo root). Pueden representar un riesgo para la seguridad si se configuran de forma incorrecta o si son explotados por atacantes. Es fundamental monitorearlos.

Para encontrar todos los archivos SUID en todo el sistema de archivos (excluyendo los sistemas de archivos montados):

find / -xdev -perm -4000 -type f

La opción -perm -4000 busca los archivos con el bit SUID establecido. El -type f asegura que buscamos solo archivos regulares.

Ejecutar un Comando sobre los Resultados con -exec

La opción -exec es una de las más potentes de find, permitiendo ejecutar un comando externo sobre cada archivo encontrado. Se concluye con \; para ejecutar el comando para cada archivo individual, o con + para agrupar varios archivos y pasarlos como argumentos individuales al comando, haciéndolo más eficiente.

Para encontrar todos los archivos .php en /var/www y buscar la cadena eval dentro de ellos, imprimiendo solo el nombre del archivo (-l):

find /var/www -type f -name "*.php" -exec grep -l eval {} +

El {} es un marcador de posición para el nombre del archivo actual. El + al final agrupa los nombres de los archivos, haciendo que grep sea más eficiente. Si hubiéramos usado \;, grep se ejecutaría una vez por cada archivo.

Borrar de Forma Segura con -delete

La opción -delete permite eliminar los archivos encontrados. Es extremadamente potente y debe usarse con la máxima precaución. Siempre se recomienda probar el comando sin -delete primero, para verificar que la selección de archivos sea correcta.

Para eliminar los archivos temporales más antiguos de 30 días en el directorio /tmp:

find /tmp -type f -mtime +30 -delete

Este comando se utiliza a menudo en scripts de mantenimiento para limpiar archivos de log o temporales. Asegúrate de tener los permisos necesarios.

Limitar la Profundidad y Excluir Directorios

Para búsquedas más específicas, puedes controlar la profundidad del escaneo o excluir directorios específicos.

-maxdepth N limita la búsqueda a N niveles de subdirectorios. -mindepth N comienza la búsqueda desde N niveles de subdirectorios.

Para buscar directorios solo en los primeros 2 niveles (desde el directorio actual):

find . -maxdepth 2 -type d

La opción -prune es útil para excluir directorios completos de la búsqueda. Debe usarse con precaución y a menudo combinada con -o (OR) y -print.

Para buscar archivos .conf en /srv pero excluyendo el directorio /srv/cache:

find /srv -path /srv/cache -prune -o -name "*.conf" -print

Aquí, -path /srv/cache -prune indica a find que no descienda en /srv/cache. El operador -o (OR) significa «o» y -print es necesario para imprimir los resultados de la expresión siguiente, dado que -prune tiene el efecto secundario de no imprimir nada para el directorio excluido.

find y xargs: Cuándo Usarlos Juntos

Aunque -exec es potente, tiene limitaciones, en particular en la gestión de espacios en los nombres de archivo o en el número de argumentos que puede pasar a un comando externo. xargs es una herramienta complementaria que resuelve estos problemas, construyendo y ejecutando líneas de comando a partir de la entrada estándar.

Para pasarle nombres de archivo con espacios, usa -print0 con find y -0 con xargs:

find /tmp -name "*.tmp" -print0 | xargs -0 rm

Esta es la forma más segura de eliminar archivos encontrados por find cuando los nombres de archivo pueden contener espacios o caracteres especiales, ya que -print0 y -0 usan el carácter nulo como delimitador.

Errores Comunes y Resolución de Problemas

  • Permisos denegados (Permission denied): A menudo find encuentra directorios para los cuales el usuario actual no tiene permisos de lectura. Puedes ignorar estos errores redirigiendo la salida de error: 2>/dev/null. Si necesitas buscar en áreas protegidas, usa sudo.
  • Uso incorrecto de comodines: Recuerda encerrar los patrones con comodines (*, ?) entre comillas ("") para evitar que la shell los expanda antes de que find los procese.
  • find y -delete: Nunca uses -delete directamente en producción sin haber probado el comando sin él. Ejecuta primero el comando y luego añade -delete solo cuando estés seguro de la selección.
  • -exec y \; vs +: Entender la diferencia es crucial para el rendimiento. \; ejecuta el comando una vez por cada resultado, + lo ejecuta una vez para un bloque de resultados. Usa + cuando sea posible para mayor eficiencia.
  • -xdev y sistemas de archivos: Si buscas en un sistema de archivos específico y no quieres atravesar los puntos de montaje de otros sistemas de archivos, -xdev es tu aliado. Sin él, find puede ralentizarse o darte resultados inesperados.

FAQ — Preguntas Frecuentes

¿Cómo puedo buscar archivos basándome en su contenido, no solo en el nombre?

Para buscar archivos basándose en su contenido, puedes combinar find con grep utilizando la opción -exec. Por ejemplo, find . -type f -exec grep -l "cadena a buscar" {} \; buscará la «cadena a buscar» en todos los archivos regulares en el directorio actual e imprimirá los nombres de los archivos que la contienen. El -l de grep sirve para imprimir solo el nombre del archivo.

¿Cuál es la diferencia entre -mtime, -ctime y -atime?

-mtime (modification time) se refiere a la última vez que el contenido del archivo fue modificado. -ctime (change time) se refiere a la última vez que los metadatos del archivo (como propietario, permisos o contenido) fueron modificados. -atime (access time) se refiere a la última vez que el archivo fue leído o accedido. Cada uno de estos puede especificarse con +N, -N o N días.

¿Puedo combinar múltiples criterios de búsqueda con AND/OR?

Sí, find soporta operadores lógicos. Por defecto, las pruebas se combinan con un operador AND implícito. Para un OR, usa -o. Para negar una prueba, usa !. Por ejemplo, find . -type f \( -name ".log" -o -name ".txt" \) buscará archivos .log o .txt. Los paréntesis deben escaparse (\) o encerrarse entre comillas para evitar la interpretación de la shell.

¿Cómo encuentro directorios vacíos?

Para encontrar directorios vacíos, puedes usar la opción -empty combinada con -type d. Por ejemplo, find /ruta/a/buscar -type d -empty listará todos los subdirectorios vacíos dentro de la ruta especificada. Esta es una excelente opción para la limpieza del sistema de archivos.

¿Hay alguna forma de visualizar la salida de find en un formato más legible?

find imprime las rutas de los archivos por defecto. Si deseas una salida más detallada, puedes combinarlo con ls a través de -exec. Por ejemplo, find . -type f -name "*.conf" -exec ls -lh {} \; mostrará los detalles (permisos, propietario, tamaño, fecha) de cada archivo .conf encontrado, en formato legible.

Conclusiones con Puntos Clave Operativos

Dominar el comando find es mucho más que una simple habilidad de sysadmin: es un verdadero superpoder que permite navegar y gestionar de manera eficiente incluso los entornos Linux más complejos. Desde los casos de uso sencillos como la búsqueda por nombre, hasta las operaciones avanzadas de limpieza automática con -delete o la ejecución de comandos sobre miles de archivos mediante -exec y xargs, find ofrece una flexibilidad sin igual. Recuerda siempre probar tus comandos en entornos seguros, especialmente aquellos que modifican o eliminan archivos, y aprovechar sus opciones para limitar la profundidad de búsqueda o excluir directorios específicos. Dedica tiempo a explorar sus numerosas opciones, y verás una notable mejora en tu productividad y en la fiabilidad de tus operaciones de sistema. Un sysadmin que conoce bien find es un sysadmin más eficaz y seguro.

Fuentes

Actualizado: Octubre 2026

Comparte este artículo:

Escrito por

Rosario Giordano

Rosario Giordano es administrador de sistemas y consultor de TI especializado en c iberseguridad y cloud, con más de 20 años de experiencia en la gestión de infraestructuras Linux empresariales. Sus áreas de especialización incluyen el hardening de SSH, plataformas Kubernetes , bases de datos PostgreSQL, virtualización con VMware/Proxmox y el cumplimiento de los marcos de seguridad NIS2 e ISO 27001.