Guía Master del Comando find en Linux: De Cero a PRO 🔍

Cesar A. Fernandez B.
Sr. Software Engineer

Guía Master del Comando find en Linux: De Cero a PRO 🔍
(Domina cada detalle, evita errores y úsalo como un verdadero sysadmin)
Muchachones, hace unos días me tocó subirme a una máquina y necesitaba encontrar rápidamente unos archivos de configuración. Vaya que me costó un mundo!!! Jajaja. Estoy tan acostumbrado a mi explorador de archivos y a las herramientas con interfaz gráfica que, para ser sincero, ya ni me acordaba cómo hacer ciertas acciones desde la consola.
Por esa razón, les traigo esta guía para refrescar conocimientos y tener a la mano cómo usar una de las herramientas más poderosas que tenemos en Linux.
0. ¿Por Qué 'find' es la Navaja Suiza de Linux?
Imagina que tu disco duro es una biblioteca caótica. 'find' es el bibliotecario que:
- Sabe exactamente dónde está cada libro (archivo).
- Puede buscar por título, tamaño, fecha de edición, color de portada (permisos).
- Automatiza tareas (borrar, copiar, comprimir) mientras buscas, y todo desde la terminal!!! Aquí está cómo exprimir al 100% esta herramienta.
1. Sintaxis Básica: Entendiendo la Estructura
find [dónde-buscar] [expresiones] [acciones]
- '[dónde-buscar]': Ruta inicial (ej: '/home', '.' para el directorio actual).
- '[expresiones]': Criterios (nombre, tipo, tamaño...).
- '[acciones]': Qué hacer con los resultados (imprimir, borrar, ejecutar comandos).
Ejemplo Minimalista:
find . -name "*.txt" -print # Busca .txt en la carpeta actual y subcarpetas
(El '-print' es opcional! Si no pones acciones, 'find' lo añade automáticamente).
2. Búsquedas por Atributos Específicos
Nombre y Tipo de Archivo
- '-name': Búsqueda exacta (case-sensitive).
find /etc -name "nginx.conf" # Archivo exacto, mayúsculas/minúsculas importan
- '-iname': Ignora mayúsculas/minúsculas.
find . -iname "IMAGEN.jpg" # Encuentra "imagen.JPG", "Imagen.jpg", etc.
- '-type': Filtra por tipo:
- 'f': Archivo regular.
- 'd': Directorio.
- 'l': Enlace simbólico.
find ~/ -type d -name "proyectos" # Directorios llamados "proyectos"
Tamaño de Archivo
- '-size': Usa '+'' para "mayor que", '-' para "menor que". Unidades: 'c' (bytes), 'k' (KB), 'M' (MB), 'G' (GB).
(Ojo! Sin unidad, se usan bloques de 512 bytes. Ej: '-size 2' = 2 bloques = 1024 bytes).find /var -size +500M # Archivos >500MB find . -size -10k # Archivos <10KB
Fechas
- '-mtime': Días desde la última modificación.
find /backup -mtime +30 # No modificados en 30+ días (¡ideales para borrar!)
- '-mmin': Minutos desde la modificación.
find /tmp -mmin -60 # Archivos modificados en la última hora
- '-newer': Compara con otro archivo.
find . -newer referencia.txt # Archivos más nuevos que "referencia.txt"
Permisos y Propietario
- '-perm': Busca por permisos exactos (octal o simbólico).
find /usr/bin -perm 755 # Permisos rwxr-xr-x find /home -perm -u=rwx # Archivos donde el dueño tiene rwx
- '-user' y '-group':
find /var/www -user www-data # Archivos del usuario "www-data"
3. Combinando Expresiones: Lógica Avanzada
find permite usar operadores lógicos ('-and', '-or', '-not') y paréntesis para crear condiciones complejas.
Ejemplo 1: Archivos '.log' o '.txt' modificados en los últimos 2 días.
find /var/log \( -name "*.log" -o -name "*.txt" \) -mtime -2
(Los paréntesis '(' ')' deben escaparse con ''!)
Ejemplo 2: Archivos de más de 100MB que NO sean .iso
find / -size +100M -not -name "*.iso"
Ejemplo 3: Directorios vacíos (cuidado al borrar!).
find /tmp -type d -empty # Directorios vacíos
4. Acciones: Cuando Encuentras, Actúa
'-print' y '-ls'
- '-print0': Separa resultados con '\0' (ideal para 'xargs').
find . -name "*.pdf" -print0 | xargs -0 rm # Borra sin problemas con espacios
- '-ls': Muestra detalles como 'ls -l'.
find /etc -name "*.conf" -ls # Permisos, dueño, tamaño, etc.
'-delete' (Peligro!!!)
find /tmp -name "*.tmp" -mtime +7 -delete # Borra archivos .tmp de +7 días
Mejores Practicas!!! Siempre prueba primero:
find /tmp -name "*.tmp" -mtime +7 -print # Verifica qué se borraría
'-exec': El Arma Secreta
Ejecuta cualquier comando sobre cada archivo encontrado.
- Formato Básico:
find . -name "*.jpg" -exec chmod 644 {} \; # {} = archivo, \; = fin
- Formato Eficiente (con '+'):
(Usa '+' al final para pasar múltiples archivos al comando y ahorrar recursos).find . -name "*.log" -exec gzip {} + # Comprime todos juntos, no uno por uno
Ejemplo Real: Busca y reemplaza texto en archivos PHP.
find /var/www -name "*.php" -exec sed -i 's/old_string/new_string/g' {} \;
5. Optimización: Busca como un Rayo
En sistemas con millones de archivos, 'find' puede ser lento. Trucos para acelerarlo:
- Limita la Profundidad:
find /var/log -maxdepth 2 -name "*.log" # Solo 2 niveles de subcarpetas
- Excluye Carpetas:
find / -path "/mnt/*" -prune -o -name "*.db" # Ignora /mnt
- No Cruzar Sistemas de Archivos ():
-xdev
find / -xdev -name "kernel.log" # Solo en el sistema de archivos actual
- Orden de Expresiones: Pon primero filtros rápidos (nombre antes que tamaño).
6. Scripts y Automatización: Tu Aliado en Tareas Diarias
Caso 1: Backup de fotos recientes.
#!/bin/bash
# Backup de .jpg modificados en los últimos 7 días
find ~/Fotos -name "*.jpg" -mtime -7 -exec cp {} /backup/fotos \;
Caso 2: Limpieza de logs antiguos.
find /var/log/nginx -name "*.log" -mtime +30 -exec rm -f {} \;
Caso 3: Buscar archivos y comprimirlos.
find /data -type f -name "*.csv" -exec tar -czvf backup.tar.gz {} +
7. Seguridad: Encuentra Vulnerabilidades como un Hacker Ético
Archivos SUID/SGID (Peligrosos!!!)
find / -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null
- SUID ('-perm -4000'): Ejecuta como dueño (usualmente root).
- SGID ('-perm -2000'): Ejecuta como grupo dueño.
Archivos Editables por Cualquiera
find / -type f -perm -0002 -ls 2>/dev/null # World-writable files
Directorios sin Sticky Bit
find / -type d -perm -0002 ! -perm -1000 # Cualquiera puede borrar archivos aquí
Archivos Huérfanos
find / -nouser -o -nogroup # Sin dueño/grupo válido (posible malware)
8. Errores Comunes y Cómo Evitarlos
-
Borrar Demasiado:
- Mala Práctica:
find . -name "*" -delete # Borraría TODO en la carpeta actual!!!
- Buena Práctica:
find . -name "*.tmp" -print # Verifica antes de borrar
- Mala Práctica:
-
Espacios en Nombres:
- Malo:
find . -name "*.mp3" | xargs rm # Fallará si hay espacios
- Bueno:
find . -name "*.mp3" -print0 | xargs -0 rm # Maneja espacios
- Malo:
-
No Escapar Paréntesis:
find . \( -name "*.jpg" -o -name "*.png" \) # Los espacios después de \( y antes de \) son obligatorios!!!
9. Trucos de Ninja: Eleva Tu Nivel
Búsqueda con Expresiones Regulares ('-regex')
find . -regex ".*/[a-z0-9_]+\.conf" # Nombres con letras, números y _
Buscar Dentro de Archivos con 'grep'
find /etc -type f -exec grep "password" {} \; # Contraseñas en texto plano?
Crear Listados Personalizados
find . -type f -printf "%p - %s bytes - Última modificación: %Td/%Tm/%TY\n"
Ejecutar Comandos en Paralelo
find . -name "*.mp4" -print0 | xargs -0 -P 4 -I {} ffmpeg -i {} {}.mp3
(Convierte 4 MP4 a MP3 simultáneamente)
find es una de las herramientas más poderosas en Linux. Con esta guía, ahora sabes:
- Buscar cualquier cosa con criterios específicos.
- Automatizar tareas complejas (limpieza, backups, auditorías).
- Evitar errores catastróficos con buenas prácticas.
- Usar find como un PRO para detectar detalles y proteger tu sistema.
Tu Reto Final!!! Ejecuta este comando y descubre qué hace:
find ~/ -type f -name "*.old" -exec rm -i {} \;
(Pista: '-i' pregunta antes de borrar. Siempre útil para evitar sustos!)
Muchachons ahora vayan a dominar su sistema de archivos. El poder de 'find' está en tus manos!