À propos du projet
findDupes est un utilitaire en ligne de commande écrit en Go qui localise les fichiers en double par hachage de contenu plutôt que par nom de fichier, de sorte que les copies portant des noms différents sont tout de même détectées. Il recherche dans un ou plusieurs répertoires et effectue le hachage de manière concurrente.
Le balayage se déroule en plusieurs étapes pour éviter de lire chaque fichier en entier. D'abord, il parcourt récursivement les racines fournies et collecte le chemin et la taille de chaque fichier régulier ; les fichiers dont la taille est unique parmi ceux découverts sont écartés, car ils ne peuvent pas avoir de copie identique. Les candidats restants sont hachés sur leurs 4 premiers KiB par un pool de travailleurs, et seuls les fichiers partageant ce hachage de préfixe sont relus et hachés intégralement avec SHA-256. Les fichiers ayant le même hachage intégral sont signalés comme doublons. Les vérifications de taille et de préfixe servent uniquement de filtres, de sorte que les fichiers aux tailles ou hachages de préfixe différents ne sont jamais comparés intégralement.
La gestion des racines est délibérément rigoureuse. Les racines sont converties en chemins absolus résolus pour les liens symboliques avant le scan ; les racines répétées ou chevauchantes (comme un même répertoire donné deux fois, ou un répertoire et son sous-répertoire) sont dédupliquées, y compris les orthographes différentes ou les chemins résolvant à travers le même lien symbolique. Les liens symboliques rencontrés à l'intérieur d'un répertoire scanné ne sont pas suivis, seuls les fichiers réguliers sont collectés, et les multiples chemins vers un même fichier en dur lié sont collectés une seule fois. Un fichier non lisible pendant le hachage est journalisé et ignoré ; si une racine ne peut pas être résolue ou parcourue, les fichiers trouvés sous les autres racines restent traités, mais la commande renvoie une erreur après avoir affiché les résultats. Ctrl-C et SIGTERM annulent un scan en cours, le travail s'arrêtant entre les lectures du système de fichiers.
Les groupes de doublons sont affichés avec leur hachage SHA-256, leur taille et leurs chemins ; les chemins au sein de chaque groupe et les groupes eux-mêmes sont triés pour obtenir un résultat reproductible. Les indicateurs incluent -v/--verbose pour le suivi en cours de scan, -w/--workers pour le nombre de travailleurs de hachage concurrents (défaut : nombre de CPUs), --json pour des objets JSON délimités par retour à la ligne avec les champs hash, size et paths, --stats pour les statistiques de scan sur stderr, et --version. Les statistiques couvrent les fichiers découverts, les fichiers filtrés par taille, les candidats au hachage de contenu, les groupes de doublons et les fichiers en double ; écrire ces statistiques sur stderr rend la sortie JSON sécurisée pour pipe dans des outils tels que jq.
L'installation nécessite Go 1.25 ou version ultérieure et peut être effectuée avec go install github.com/mojotx/findDupes@latest, ou en clonant le dépôt et en exécutant go install -v ./.... Le dépôt inclut des workflows CI et CodeQL, et sa matrice de tests exécute la suite activée pour le race condition sur Linux, macOS et Windows en utilisant la version Go déclarée dans go.mod.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.