¿Alguna vez has abierto tu servidor Linux y has pensado, “¿Dónde fue a parar ese archivo?” Un minuto todo parece estar bien, y al minuto siguiente tu almacenamiento se está llenando, tus registros se están acumulando o tu carpeta de proyecto parece imposible de manejar. manage.
En momentos como estos, no quieres perder el tiempo haciendo clic en directorios, quieres una respuesta rápida y clara. Eso es exactamente lo que ofrece Comando find en Linux Te ofrece esta herramienta. Te ayuda a buscar archivos y carpetas utilizando filtros sencillos como nombre de archivo, tamaño, fecha de modificación, permisos y propietario.
En este artículo aprenderás sobre el mundo real. find Ejemplos que los administradores y desarrolladores utilizan a diario para solucionar problemas, limpiar archivos antiguos, comprobar riesgos de seguridad y mantener los servidores organizados sin confusiones ni conjeturas.
Cómo funciona el comando find en Linux
GNU find (común en Linux) Recorre los árboles de directorios y compara cada entrada con expresiones (predicados). Cuando encuentra un archivo que coincide, ejecuta una acción (como imprimir la ruta). Las expresiones se procesan de izquierda a derecha con lógica de cortocircuito, por lo que el orden es importante para el rendimiento y la corrección.
Sintaxis básica y selección de ruta
find [PATH...] [OPTIONS] [EXPRESSION] [ACTIONS]Patrones comunes:
# Search current directory recursively
find . -name "*.log"
# Search multiple paths
find /var/www /home -type f -size +100M
# Limit depth
find /etc -maxdepth 1 -type fPredicados y acciones
- Predicados: -nombre, -tipo, -tamaño, -mtime, -usuario, -grupo, -permisos, -ruta, -expresión regular, -vacío, -enlaces, -inum, -más reciente
- Operadores logicos: -y (implícito), -o (-o), -no (!), paréntesis ( ) para agrupar
- Comportamiento: -print (predeterminado), -print0, -ls, -exec, -execdir, -ok, -delete, -printf (GNU)
Opciones de búsqueda más utilizadas (con ejemplos breves)
- -nombre/-iname: Coincidencia por nombre de archivo (distinguiendo mayúsculas y minúsculas/sin distinguirlas)
- -tipo: f (archivo), d (directorio), l (enlace simbólico), b/c (dispositivos), s (socket), p (FIFO)
- -tamaño: Tamaño del archivo usando c (bytes), k, M, G con + (mayor que) o – (menor que)
- -mtime/-mmin: Hora de última modificación (días/minutos). También -atime (acceso), -ctime (metadatos).
- -usuario/-grupo: Filtrar por propietario o grupo
- -permanente: Coincidencia de modos de permisos (exactos o máscaras)
- -profundidad máxima/-profundidad mínima: Controlar la profundidad de recursión
- -ruta/-ipath/-regex: Coincidir con la ruta completa (útil para directorios)
- -ciruela pasa: Excluir directorios de forma eficiente
- -print0 con xargs -0: Tubería segura para espacios y caracteres especiales
# Case-insensitive name match
find /var/www -iname "*.php"
# Only directories named cache
find . -type d -name "cache"
# Files larger than 500 MB
find / -type f -size +500M 2>/dev/null
# Modified in the last 15 minutes
find /var/log -type f -mmin -15
# Owned by nginx user
find /var/www -type f -user nginx
# World-writable files (security check)
find / -type f -perm -0002 2>/dev/null
# Limit recursion
find /etc -maxdepth 1 -type f
# Exclude node_modules directories
find . -type d -name node_modules -prune -o -type f -name "*.js" -print
# NUL-delimited safe piping
find . -type f -print0 | xargs -0 du -shEjemplos prácticos para administradores y desarrolladores
1) Descubre qué está ocupando espacio en el disco
Permite visualizar rápidamente archivos grandes en las raíces web o directorios de inicio para evitar interrupciones causadas por discos llenos.
# Top offenders > 200MB, sorted by size
find /var/www -type f -size +200M -printf "%s %p\n" 2>/dev/null | sort -nr | head -20En macOS/BSD find, -printf no está disponible. Use xargs + ls:
find /var/www -type f -size +200M -print0 2>/dev/null | xargs -0 ls -lhS | head -202) Limpiar registros y copias de seguridad antiguos
Automatice la retención para mantener el almacenamiento optimizado y evitar el aumento excesivo de copias de seguridad.
# Remove compressed logs older than 14 days (review with -print first!)
find /var/log -type f -name "*.gz" -mtime +14 -print
find /var/log -type f -name "*.gz" -mtime +14 -deleteO bien, moverlos a un directorio de archivo:
find /var/log -type f -name "*.log" -mtime +30 -exec mv -t /var/archive/logs {} +3) Auditorías de seguridad: Permisos y archivos sospechosos
# World-writable files (risky on shared hosting)
find /home -xdev -type f -perm -0002 -print
# Setuid / setgid binaries (review carefully)
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -print 2>/dev/null
# PHP files modified in last day (possible webshells after a hack)
find /var/www -type f -name "*.php" -mtime -1 -printBúsqueda de funciones codificadas utilizadas frecuentemente por malware (junto con grep):
find /var/www -type f -name "*.php" -exec grep -HniE "base64_decode|eval\(" {} \; 2>/dev/null4) Implementaciones: Archivos modificados recientemente
Verifica qué cambió en una actualización de código o detecta archivos activos.
# Files changed in last 10 minutes
find /var/www/site -type f -mmin -10 -print
# Compare against a reference marker file
touch /tmp/deploy.marker
# ... deploy ...
find /var/www/site -type f -newer /tmp/deploy.marker -print5) Excluir directorios pesados o irrelevantes
Acelere las búsquedas eliminando las rutas de proveedores, caché y sistemas de control de versiones.
find . \
-path "./node_modules" -prune -o \
-path "./vendor" -prune -o \
-path "./.git" -prune -o \
-type f -name "*.js" -print6) Encontrar y corregir enlaces simbólicos rotos
# Broken links
find /var/www -xtype l -print
# Remove them safely after review
find /var/www -xtype l -delete7) Búsqueda por contenido (con grep)
# Only PHP files containing "DB_HOST"
find . -type f -name "*.php" -exec grep -Hn "DB_HOST" {} \;
# Faster with xargs; safe for spaces with -print0/-0
find . -type f -name "*.env" -print0 | xargs -0 grep -Hn "SECRET_KEY"8) Preparar listas de archivos para la copia de seguridad o sincronización.
# Archive only images last modified this week
find /var/www/media -type f -mtime -7 \( -iname "*.jpg" -o -iname "*.png" \) -print0 | \
tar --null -T - -czf recent-images.tgzEliminaciones seguras y mejores prácticas con -exec
- Siempre pruebe con -imprimir antes de -eliminar o -ejecutar.
- Usa -Aceptable para confirmación interactiva en rutas críticas.
- Utilice -exec … {} + para operaciones por lotes (menos procesos generados).
- Usa -print0 y xargs -0 para manejar espacios/saltos de línea de forma segura.
- Cuando use -eliminar en directorios, combinar con -profundidad para evitar problemas de orden.
# Dry run
find /backups -type f -mtime +30 -print
# Delete after verification
find /backups -type f -mtime +30 -depth -delete
# Batch-remove .tmp files efficiently
find . -type f -name "*.tmp" -exec rm -f {} +Consejos para el buen funcionamiento de árboles grandes
- Empiece por la ruta más cercana (evite usar find / a menos que sea necesario).
- Usa -maxdepth/-mindepth para reducir el coste de recorrido.
- Elimine los directorios que generan ruido: node_modules, vendor, .git, cache, sessions.
- Combine las comprobaciones de nombres simples antes de los predicados costosos (como -regex o -exec).
- Utilice -mount para evitar acceder a otros sistemas de archivos (por ejemplo, /proc, /sys, NFS).
- Para mayor velocidad, es preferible usar -name con globs en lugar de -regex.
- Si la opción updatedb está habilitada, considere usar locate para búsquedas instantáneas de nombres de archivo. Para los desarrolladores, herramientas modernas como fd o ripgrep pueden complementar find para mayor velocidad.
Diferencias entre GNU find y BSD/macOS find
- -printf es específico de GNU; En macOS, utilice -exec stat o xargs ls para formatear.
- -regextype es GNU; BSD find admite diferentes expresiones regulares predeterminadas.
- -El comportamiento y la seguridad de la eliminación pueden variar; pruebe primero con -imprimir.
- En macOS, instala GNU find a través de Homebrew (findutils) como gfind para obtener todas las funciones de GNU.
Buscar comandos en flujos de trabajo de alojamiento y DevOps
En los servidores de producción, el comando find es fundamental para el mantenimiento rutinario: borrar registros antiguos, auditar permisos, encontrar cargas de usuario demasiado grandes o preparar copias de seguridad selectivas. En el alojamiento de WordPress, es invaluable para limpiar directorios de caché, localizar medios pesados o detectar modificaciones recientes. PHP archivos tras una presunta vulneración.
# WordPress: clear cache older than 12 hours (various plugins)
find /var/www/site/wp-content/cache -type f -mmin +720 -delete
# Identify huge uploads
find /var/www/site/wp-content/uploads -type f -size +50M -printSi prefieres no hacerlo manage estas tareas usted mismo, YouStable, manageplanes de alojamiento VPS y dedicado Incluimos asistencia experta para el endurecimiento de servidores, la monitorización proactiva y la gestión del almacenamiento. De esta forma, usted se centra en el lanzamiento de nuevas funcionalidades mientras nosotros nos encargamos de que su infraestructura Linux sea limpia, rápida y segura.
Solución de problemas y posibles inconvenientes
- Citando Para evitar la expansión de shell, utilice entrecomillados los patrones en -name (use -name “*.log”, no -name *.log).
- El orden importa: find evalúa de izquierda a derecha; coloque primero las pruebas baratas y use la agrupación con paréntesis.
- Operadores: -o es OR, -a es AND (implícito). Use \( … \) y \! para NOT.
- Espacios en los nombres: Siempre prefiera -print0 | xargs -0 o -exec … {} +.
- -ruta vs -nombre: Utilice -path para la coincidencia basada en directorios (por ejemplo, “*/cache/*”).
- Coincidencia de permisos: -perm 0644 es exacto; -perm -g+w significa "escribible por el grupo".
- Sistemas de archivos cruzados: Utilice -xdev o -mount para evitar recorrer /proc, /sys o montajes de red.
Preguntas Frecuentes
1. ¿Cuál es la diferencia entre encontrar y localizar?
`find` escanea el sistema de archivos en tiempo real y admite filtros avanzados (tamaño, fecha, permisos). `locate` consulta una base de datos predefinida (`updatedb`) y devuelve los resultados al instante solo por nombre. Use `locate` para búsquedas rápidas por nombre de archivo; use `find` para búsquedas precisas, actualizadas al minuto y basadas en atributos.
2. ¿Cómo excluyo un directorio de la búsqueda?
# Exclude specific directories with -prune find . -path "./vendor" -prune -o -type f -print # Exclude multiple find . \( -path "./vendor" -o -path "./node_modules" -o -path "./.git" \) -prune -o -type f -print
3. ¿Cómo puedo buscar por fecha de modificación (posterior a X)?
# Modified in last 2 days find /var/www -type f -mtime -2 # Newer than a reference file find /var/www -type f -newer /path/to/reference.file
4. ¿Cómo puedo realizar una búsqueda de nombres de archivo sin distinguir entre mayúsculas y minúsculas?
find . -type f -iname "*.jpg" find . -type f -iname "readme.*"
5. ¿Cuál es la forma más segura de eliminar los archivos coincidentes?
Primero, ejecute sin eliminar y revise la salida (-print). Luego confirme con -ok si es necesario. Para la eliminación masiva, use -delete solo después de verificar las coincidencias, idealmente combinado con -depth. Ejemplo: find /path -type f -name “*.tmp” -print; luego find /path -type f -name “*.tmp” -delete.
Conclusión
El comando find en Linux es una habilidad fundamental para administradores y desarrolladores. Con filtros precisos y acciones seguras, puede localizar archivos, reforzar la seguridad y recuperarlos. espacio del discoy automatizar el mantenimiento con confianza.
Aplique los ejemplos anteriores a su entorno y considere YouStable, manageSi desea que expertos experimentados optimicen y protejan sus servidores, contrate un servicio de alojamiento web.