Cómo buscar archivos en CentOS (Linux) con el comando find

CentOS (Community Enterprise Operating System) es una distribución Linux empresarial (ahora CentOS Stream). El comando find es la herramienta estándar para localizar archivos por nombre, tipo, tamaño, fecha, permisos, etc.

Sintaxis básica

find [ruta_inicio] [expresiones] [acciones]

Si omites la ruta, busca en el directorio actual (`.`).

Ejemplos prácticos

Por nombre exacto

find / -name "tables.txt" 2>/dev/null

`2>/dev/null` oculta errores de "Permiso denegado".

Por patrón (comodines)

find /home -name "tables.*"       # cualquier extensión
find /var/log -name "*.log"       # todos los .log
find / -name "report[0-9].txt"    # report1.txt, report2.txt...

Usa `-iname` para ignorar mayúsculas/minúsculas.

Por tipo de archivo

find / -type f -name "*.conf"     # solo archivos regulares
find /etc -type d -name "nginx*"  # solo directorios
find /dev -type l                 # enlaces simbólicos

Por tamaño

find / -size +100M                # mayores de 100 MB
find /home -size -1k                # menores de 1 KB
find / -size 50M                  # exactamente ~50 MB

Por tiempo (modificación/acceso/cambio)

find /var/log -mtime -7           # modificados últimos 7 días
find /home -atime +30             # no accedidos en 30 días
find / -ctime -1                  # metadatos cambiados hoy
  • `-mmin`, `-amin`, `-cmin` para minutos.
  • `-newer archivo` → más nuevo que el archivo de referencia.

Por permisos y propietario

find / -perm /u=s                 # archivos con bit SUID
find / -user juan                 # propiedad de juan
find / -group www-data            # grupo www-data

Ejecutar acción sobre resultados

find /tmp -name "*.tmp" -delete           # eliminar (¡cuidado!)
find /home -name "*.jpg" -exec cp {} /backup/ \;
find . -type f -name "*.txt" -exec grep -l "error" {} \;
  • `{}` se sustituye por cada archivo encontrado.
  • `\;` termina `-exec`; `+` agrupa varios archivos en una invocación (más rápido).
  • `-ok` pide confirmación antes de cada ejecución.

Combinar criterios (operadores lógicos)

find /var/log -name "*.log" -size +10M -mtime -30
# logs >10 MB modificados en últimos 30 días

find / \( -name "*.jpg" -o -name "*.png" \) -type f
# imágenes JPG o PNG (paréntesis escapados)

Alternativa rápida: locate

`locate patron` usa base de datos actualizada periódicamente (`updatedb`). Mucho más rápido, pero no en tiempo real ni con filtros avanzados.

sudo dnf install mlocate  # o yum/install según versión
sudo updatedb
locate tables.txt

Consejo

Para búsquedas frecuentes complejas, crea un script o alias en tu `.bashrc`.