Sobre el proyecto
findDupes es una utilidad de línea de comandos escrita en Go que localiza archivos duplicados por hash de contenido en lugar de por nombre de archivo, por lo que se detectan copias con nombres diferentes. Busca en uno o más directorios y realiza el hash de forma concurrente.
El escaneo se realiza por etapas para evitar leer cada archivo en su totalidad. Primero, recorre recursivamente las raíces proporcionadas y recopila la ruta y el tamaño de cada archivo regular; los archivos cuyo tamaño es único entre los archivos descubiertos se descartan, ya que no pueden tener una copia idéntica. Los candidatos restantes son procesados por un grupo de trabajadores (worker pool) que calcula el hash de sus primeros 4 KiB, y solo los archivos que comparten ese hash de prefijo se leen de nuevo y se procesan por completo con SHA-256. Los archivos con el mismo hash completo se informan como duplicados. Las comprobaciones de tamaño y prefijo actúan puramente como filtros, por lo que los archivos con diferentes tamaños o hashes de prefijo nunca se comparan completamente entre sí.
El manejo de las raíces es deliberadamente cuidadoso. Las raíces se convierten en rutas absolutas con enlaces simbólicos resueltos antes del escaneo; las raíces repetidas o superpuestas (como el mismo directorio indicado dos veces, o un directorio y su subdirectorio) se deduplican, incluyendo diferentes escrituras o rutas que se resuelven a través del mismo enlace simbólico. Los enlaces simbólicos encontrados dentro de un directorio escaneado no se siguen, solo se recopilan archivos regulares, y las múltiples rutas al mismo archivo con enlaces físicos (hard-linked) se recopilan una sola vez. Un archivo que no se puede leer durante el proceso de hash se registra y se omite; si una raíz no se puede resolver o recorrer, los archivos encontrados bajo otras raíces se siguen procesando, pero el comando devuelve un error después de imprimir los resultados. Ctrl-C y SIGTERM cancelan un escaneo activo, deteniendo el trabajo entre lecturas del sistema de archivos.
Los grupos de duplicados se imprimen con su hash SHA-256, tamaño de archivo y rutas; las rutas dentro de cada grupo y los grupos mismos se ordenan para obtener una salida repetible. Las banderas incluyen -v/--verbose para ver el progreso durante el escaneo, -w/--workers para el número de trabajadores de hash concurrentes (por defecto: número de CPUs), --json para objetos JSON delimitados por nuevas líneas con los campos hash, size y paths, --stats para estadísticas de escaneo en stderr, y --version. Las estadísticas cubren archivos descubiertos, archivos filtrados por tamaño, candidatos de hash de contenido, grupos de duplicados y archivos duplicados; escribirlas en stderr mantiene la salida JSON segura para ser enviada a herramientas como jq.
La instalación requiere Go 1.25 o posterior y se puede realizar con go install github.com/mojotx/findDupes@latest, o clonando el repositorio y ejecutando go install -v ./.... El repositorio incluye flujos de trabajo de CI y CodeQL, y su matriz de pruebas ejecuta la suite con detección de carreras (race-enabled) en Linux, macOS y Windows utilizando la versión de Go declarada en go.mod.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.