Dans le code, uniquement les hashes sont utilisés pour détecter les fichiers dupliqués.
Or on sait très bien que les hashes ont des collisions, elles sont rares, mais elles existent. (Forcément, sinon pourquoi perdrait-on des milliers de Mo pour stocker des fichiers alors que quelques octets (les hashes) suffisent...)
Pour trouver des fichiers dupliqués voici une approche:
1. On vérifie les tailles (c'est la plus rapide vérification)
2. Si les tailles sont identiques, on vérifie les hashes (complet sur les fichiers) (on stock les hashes pour ne pas les recalculer à chaque fois)
3. Si les hashes sont identiques, on compare les contenus en entier.
J'ai déjà eu des dizaines de fichiers effacés par erreur par un outil qui faisait de la dé-duplication. Liten (https://code.google.com/archive/p/liten/), il y a un également Liten2 (https://code.google.com/archive/p/liten2/) Tous les 2 sont à proscrire. Ils utilisent (enfin utilisaient, je n'ai plus regardé le code source) un hash basé sur les premiers 16Ko des fichiers. Pour aller plus vite...
# Attention à la dé-duplication
Posté par zyphos . En réponse à la dépêche Optimisations et corrections pour Fim 1.2.3. Évalué à 5.
Dans le code, uniquement les hashes sont utilisés pour détecter les fichiers dupliqués.
Or on sait très bien que les hashes ont des collisions, elles sont rares, mais elles existent. (Forcément, sinon pourquoi perdrait-on des milliers de Mo pour stocker des fichiers alors que quelques octets (les hashes) suffisent...)
Pour trouver des fichiers dupliqués voici une approche:
1. On vérifie les tailles (c'est la plus rapide vérification)
2. Si les tailles sont identiques, on vérifie les hashes (complet sur les fichiers) (on stock les hashes pour ne pas les recalculer à chaque fois)
3. Si les hashes sont identiques, on compare les contenus en entier.
J'ai déjà eu des dizaines de fichiers effacés par erreur par un outil qui faisait de la dé-duplication. Liten (https://code.google.com/archive/p/liten/), il y a un également Liten2 (https://code.google.com/archive/p/liten2/) Tous les 2 sont à proscrire. Ils utilisent (enfin utilisaient, je n'ai plus regardé le code source) un hash basé sur les premiers 16Ko des fichiers. Pour aller plus vite...