REFERENCIA RÁPIDA DE FIND
Búsqueda de archivos por nombre, tipo, tamaño, tiempo, permisos y acciones
Búsqueda básica
Ejecutar find
find . # listar todos los archivos recursivamente
find /var/log # buscar desde ruta específica
find . -name "*.txt" # buscar por nombre
find / -name "config" 2>/dev/null # suprimir errores de permisos
find dir1 dir2 -name "*.py" # buscar en múltiples directorios
Resumen de sintaxis
| find [path...] [tests] [actions] | Forma general — rutas, luego tests, luego acciones |
| path | Directorio de inicio (por defecto: directorio actual) |
| test | Condición para filtrar archivos (-name, -type, etc.) |
| action | Qué hacer con los resultados (-print, -exec, etc.) |
| Acción por defecto | -print si no se especifica acción |
Patrones de nombre
Coincidencia de nombre
find . -name "*.log" # glob con distinción de mayúsculas
find . -iname "readme*" # glob sin distinción de mayúsculas
find . -name "*.py" -o -name "*.js" # O: archivos Python o JS
find . -path "*/src/*.ts" # coincidir con ruta completa
find . -regex '.*\.\(py\|js\)' # regex POSIX en ruta completa
Tests de nombre
| -name pattern | Nombre base coincide con glob (distingue mayúsculas) |
| -iname pattern | Nombre base coincide con glob (sin distinguir) |
| -path pattern | Ruta completa coincide con glob |
| -ipath pattern | Ruta completa coincide con glob (sin distinguir) |
| -regex pattern | Ruta completa coincide con expresión regular |
| -iregex pattern | Ruta completa coincide con regex (sin distinguir) |
Filtros de tipo
Filtrar por tipo
find . -type f # solo archivos regulares
find . -type d # solo directorios
find . -type l # enlaces simbólicos
find . -type f -name "*.sh" # combinar tipo + nombre
Tipos de archivo
| -type f | Archivo regular |
| -type d | Directorio |
| -type l | Enlace simbólico |
| -type b | Dispositivo de bloque |
| -type c | Dispositivo de caracteres |
| -type p | Tubería con nombre (FIFO) |
| -type s | Socket |
| -empty | Archivo o directorio vacío |
Tamaño y tiempo
Ejemplos de tamaño y tiempo
find . -size +100M # mayor de 100 MB
find . -size -1k # menor de 1 KB
find . -mtime -7 # modificado en los últimos 7 días
find . -mmin -30 # modificado en los últimos 30 minutos
find . -newer reference.txt # más reciente que el archivo de referencia
Tests de tamaño y tiempo
| -size +/-Nc | Tamaño en bytes (c), kilobytes (k), megabytes (M), gigabytes (G) |
| -mtime +/-N | Modificado hace N*24 horas (+más antiguo, -más reciente) |
| -atime +/-N | Accedido hace N*24 horas |
| -ctime +/-N | Estado cambiado hace N*24 horas |
| -mmin +/-N | Modificado hace N minutos |
| -newer file | Modificado más recientemente que el archivo |
| -newermt date | Modificado después de la cadena de fecha (GNU) |
Permisos
Ejemplos de permisos
find . -perm 644 # permisos exactos: rw-r--r--
find . -perm -u+x # usuario tiene bit de ejecución
find . -perm /o+w # otros tienen escritura (cualquier coincidencia)
find . -user root # propiedad de root
find . -group www-data -type f # propiedad del grupo
Tests de permisos
| -perm mode | Coincidencia exacta de permisos |
| -perm -mode | Todos los bits especificados están activos |
| -perm /mode | Cualquier bit especificado está activo |
| -user name | Propiedad del usuario (nombre o UID) |
| -group name | Propiedad del grupo (nombre o GID) |
| -nouser | Sin usuario coincidente en /etc/passwd |
| -nogroup | Sin grupo coincidente en /etc/group |
Acciones
Ejemplos de acciones
find . -name "*.log" -print # imprimir rutas (por defecto)
find . -name "*.tmp" -delete # eliminar archivos coincidentes
find . -type f -ls # listado detallado
find . -name "*.txt" -print0 # salida delimitada por nulo
find . -type f -printf "%p %s\n" # formato personalizado (GNU)
Referencia de acciones
| -print | Imprimir ruta (delimitado por salto de línea) |
| -print0 | Imprimir ruta (delimitado por nulo, seguro para xargs) |
| -ls | Imprimir detalles del archivo (como ls -dils) |
| -delete | Eliminar archivos coincidentes (implica -depth) |
| -printf format | Formato de salida personalizado (GNU): %p ruta, %s tamaño, %t tiempo |
| -fprint file | Escribir rutas en archivo |
| -quit | Salir después de la primera coincidencia |
Combinar tests
Operadores lógicos
find . -name "*.py" -type f # Y implícito
find . -name "*.py" -a -size +10k # Y explícito
find . -name "*.py" -o -name "*.js" # O
find . ! -name "*.log" # NO
find . \( -name "*.py" -o -name "*.js" \) -type f
Referencia de operadores
| expr1 expr2 / expr1 -a expr2 | Y — ambas deben ser verdaderas (por defecto) |
| expr1 -o expr2 | O — cualquiera debe ser verdadera |
| ! expr / -not expr | NO — negar la expresión |
| \( expr \) | Agrupar expresiones (escapar paréntesis en shell) |
| Orden de evaluación | De izquierda a derecha; -a tiene mayor precedencia que -o |
Exec y eliminación
Ejemplos de exec
find . -name "*.sh" -exec chmod +x {} \;
find . -name "*.log" -exec rm {} +
find . -type f -exec grep -l "TODO" {} +
find . -name "*.bak" -ok rm {} \; # confirmar antes de cada uno
find . -name "*.tmp" -print0 | xargs -0 rm
Referencia de exec
| -exec cmd {} \; | Ejecutar cmd una vez por archivo ({} = ruta del archivo) |
| -exec cmd {} + | Ejecutar cmd con múltiples archivos a la vez (más rápido) |
| -ok cmd {} \; | Como -exec pero pide confirmación |
| -execdir cmd {} \; | Ejecutar cmd desde el directorio del archivo |
| xargs -0 | Combinar con -print0 para procesamiento seguro en lote |
| -delete | Eliminar archivos; procesar primero los más profundos |
Profundidad y poda
Ejemplos de profundidad y poda
find . -maxdepth 1 -type f # solo directorio actual
find . -mindepth 2 -name "*.py" # omitir nivel superior
find . -name ".git" -prune -o -print # omitir dirs .git
find . -depth -name "*.tmp" -delete # procesar hijos primero
Opciones de profundidad
| -maxdepth N | Descender como máximo N niveles (0 = solo ruta inicial) |
| -mindepth N | No aplicar tests en niveles menores que N |
| -depth | Procesar contenidos del directorio antes que el propio directorio |
| -prune | No descender en el directorio coincidente |
| -mount / -xdev | No cruzar límites de sistemas de archivos |
| -follow / -L | Seguir enlaces simbólicos |
Patrones comunes
One-liners
find . -name "*.pyc" -delete # limpiar bytecode Python
find . -type f -size 0 -delete # eliminar archivos vacíos
find . -mtime +30 -name "*.log" -delete # purgar logs antiguos
find . -type f -name "*.md" | wc -l # contar archivos Markdown
find . -type d -empty -delete # eliminar dirs vacíos
Recetas
| Encontrar archivos más grandes | find . -type f -printf '%s %p\n' | sort -rn | head |
| Encontrar duplicados por nombre | find . -type f | awk -F/ '{print $NF}' | sort | uniq -d |
| Renombrar extensión | find . -name '*.txt' -exec rename 's/.txt/.md/' {} + |
| Encontrar enlaces simbólicos rotos | find . -xtype l |
| Archivar archivos recientes | find . -mtime -7 -print0 | tar czf recent.tar.gz --null -T - |
| Buscar en archivos de código | find . -name '*.py' -exec grep -l 'pattern' {} + |