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

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

(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

Terminal window
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:

Terminal window
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).
    Terminal window
    find /etc -name "nginx.conf" # Archivo exacto, mayúsculas/minúsculas importan
  • ‘-iname’: Ignora mayúsculas/minúsculas.
    Terminal window
    find . -iname "IMAGEN.jpg" # Encuentra "imagen.JPG", "Imagen.jpg", etc.
  • ‘-type’: Filtra por tipo:
    • ‘f’: Archivo regular.
    • ‘d’: Directorio.
    • ‘l’: Enlace simbólico.
    Terminal window
    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).
    Terminal window
    find /var -size +500M # Archivos >500MB
    find . -size -10k # Archivos <10KB
    (Ojo! Sin unidad, se usan bloques de 512 bytes. Ej: ‘-size 2’ = 2 bloques = 1024 bytes).

Fechas

  • ‘-mtime’: Días desde la última modificación.
    Terminal window
    find /backup -mtime +30 # No modificados en 30+ días (¡ideales para borrar!)
  • ‘-mmin’: Minutos desde la modificación.
    Terminal window
    find /tmp -mmin -60 # Archivos modificados en la última hora
  • ‘-newer’: Compara con otro archivo.
    Terminal window
    find . -newer referencia.txt # Archivos más nuevos que "referencia.txt"

Permisos y Propietario

  • ‘-perm’: Busca por permisos exactos (octal o simbólico).
    Terminal window
    find /usr/bin -perm 755 # Permisos rwxr-xr-x
    find /home -perm -u=rwx # Archivos donde el dueño tiene rwx
  • ‘-user’ y ‘-group’:
    Terminal window
    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.

Terminal window
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

Terminal window
find / -size +100M -not -name "*.iso"

Ejemplo 3: Directorios vacíos (cuidado al borrar!).

Terminal window
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’).
    Terminal window
    find . -name "*.pdf" -print0 | xargs -0 rm # Borra sin problemas con espacios
  • ‘-ls’: Muestra detalles como ‘ls -l’.
    Terminal window
    find /etc -name "*.conf" -ls # Permisos, dueño, tamaño, etc.

’-delete’ (Peligro!!!)

Terminal window
find /tmp -name "*.tmp" -mtime +7 -delete # Borra archivos .tmp de +7 días

Mejores Practicas!!! Siempre prueba primero:

Terminal window
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:
    Terminal window
    find . -name "*.jpg" -exec chmod 644 {} \; # {} = archivo, \; = fin
  • Formato Eficiente (con ’+’):
    Terminal window
    find . -name "*.log" -exec gzip {} + # Comprime todos juntos, no uno por uno
    (Usa ’+’ al final para pasar múltiples archivos al comando y ahorrar recursos).

Ejemplo Real: Busca y reemplaza texto en archivos PHP.

Terminal window
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:
    Terminal window
    find /var/log -maxdepth 2 -name "*.log" # Solo 2 niveles de subcarpetas
  • Excluye Carpetas:
    Terminal window
    find / -path "/mnt/*" -prune -o -name "*.db" # Ignora /mnt
  • No Cruzar Sistemas de Archivos (-xdev):
    Terminal window
    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.

Terminal window
find /var/log/nginx -name "*.log" -mtime +30 -exec rm -f {} \;

Caso 3: Buscar archivos y comprimirlos.

Terminal window
find /data -type f -name "*.csv" -exec tar -czvf backup.tar.gz {} +

7. Seguridad: Encuentra Vulnerabilidades como un Hacker Ético

Archivos SUID/SGID (Peligrosos!!!)

Terminal window
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

Terminal window
find / -type f -perm -0002 -ls 2>/dev/null # World-writable files

Directorios sin Sticky Bit

Terminal window
find / -type d -perm -0002 ! -perm -1000 # Cualquiera puede borrar archivos aquí

Archivos Huérfanos

Terminal window
find / -nouser -o -nogroup # Sin dueño/grupo válido (posible malware)

8. Errores Comunes y Cómo Evitarlos

  1. Borrar Demasiado:

    • Mala Práctica:
      Terminal window
      find . -name "*" -delete # Borraría TODO en la carpeta actual!!!
    • Buena Práctica:
      Terminal window
      find . -name "*.tmp" -print # Verifica antes de borrar
  2. Espacios en Nombres:

    • Malo:
      Terminal window
      find . -name "*.mp3" | xargs rm # Fallará si hay espacios
    • Bueno:
      Terminal window
      find . -name "*.mp3" -print0 | xargs -0 rm # Maneja espacios
  3. No Escapar Paréntesis:

    Terminal window
    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’)

Terminal window
find . -regex ".*/[a-z0-9_]+\.conf" # Nombres con letras, números y _

Buscar Dentro de Archivos con ‘grep’

Terminal window
find /etc -type f -exec grep "password" {} \; # Contraseñas en texto plano?

Crear Listados Personalizados

Terminal window
find . -type f -printf "%p - %s bytes - Última modificación: %Td/%Tm/%TY\n"

Ejecutar Comandos en Paralelo

Terminal window
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:

Terminal window
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!

Next: Guía Completa del Comando grep en Linux: De lo Básico a lo Avanzado
Foto Cesar Fernandez

¿Lo rompiste? ¿Lo mejoraste?

Gracias por llegar hasta el final. Escribo estos posts para organizar mis propias ideas y, con suerte, para ahorrarle a alguien más el dolor de cabeza que yo ya pasé. Me encuentras en LinkedIn o puedes ver más de mi trabajo en GitHub.


Serie: Guía Completa de Linux