Quelle est la meilleure méthode pour supprimer les fichiers image en double de votre ordinateur?


14

J'ai beaucoup de fichiers image en double sur mon ordinateur Windows, dans différents sous-dossiers et avec des noms de fichiers différents.

Quel script Python ou programme gratuit recommanderiez-vous pour supprimer les doublons?

(J'ai lu cette question similaire, mais l'affiche pose des questions sur les doublons visuels avec différentes tailles de fichiers. Les miens sont des doublons exacts avec des noms de fichiers différents.)


2
Gardez à l'esprit que même si tous les pixels sont identiques, ils peuvent toujours avoir des informations EXIF ​​différentes (modifiées par des programmes qui ont géré les images à un certain stade), ce qui posera des problèmes avec la plupart des solutions actuellement proposées.
user12889

Réponses:


17

Ne vous fiez pas aux sommes MD5.

Les sommes MD5 ne sont pas un moyen fiable de vérifier les doublons, elles ne sont qu'un moyen de vérifier les différences.

Utilisez les MD5 pour trouver les doublons candidats possibles , puis pour chaque paire partageant un MD5

  1. Ouvre les deux fichiers
  2. Recherche dans ces fichiers jusqu'à ce que l'un diffère.

Voyant que je suis déçu par des gens qui font des approches naïves pour déposer une identité en double, si vous comptez entièrement sur un algorithme de hachage, pour l'amour de Dieu, utilisez quelque chose de plus dur comme SHA256 ou SHA512, au moins vous réduirez la probabilité de un degré raisonnable en vérifiant plus de bits. MD5 est extrêmement faible pour les conditions de collision.

Je conseille également aux gens de lire ici les listes de diffusion intitulées «File Check»: http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Si vous dites "MD5 peut identifier tous les fichiers de manière unique", vous avez une erreur logique.

Étant donné une plage de valeurs, de longueurs variant de 40000 octets à 100 000 000 000 octets, le nombre total de combinaisons disponibles pour cette plage dépasse largement le nombre possible de valeurs représentées par MD5, pesant à peine 128 bits.

Vous représentez 2 ^ 100 000 000 000 combinaisons avec seulement 2 ^ 128 combinaisons? Je ne pense pas que ce soit probable.

La façon la moins naïve

La méthode la moins naïve et la plus rapide pour éliminer les doublons est la suivante.

  1. Par taille : les fichiers de taille différente ne peuvent pas être identiques. Cela prend peu de temps car il n'a même pas besoin d'ouvrir le fichier.
  2. Par MD5 : les fichiers avec des valeurs MD5 / Sha différentes ne peuvent pas être identiques. Cela prend un peu plus de temps car il doit lire tous les octets du fichier et effectuer des calculs sur eux, mais cela rend les comparaisons multiples plus rapides.
  3. A défaut des différences ci-dessus : effectuez une comparaison octet par octet des fichiers. Il s'agit d'un test lent à exécuter, c'est pourquoi il est laissé jusqu'à ce que tous les autres facteurs d'élimination aient été pris en compte.

Fdupes fait cela. Et vous devez utiliser un logiciel qui utilise les mêmes critères.


7
Il est littéralement plus probable que votre disque dur détruise comme par magie une image que le MD5 n'entre en collision. "Représente 2 ^ 100 000 000 000 combinaisons avec seulement 2 ^ 128 combinaisons" - je suis d'accord avec vous ici. S'il avait 2 ^ 100 000 000 000 d'images, MD5 (ou presque n'importe quel algorithme de hachage) serait mauvais.
Greg Dean

4
il n'y a aucune garantie, c'est peu probable . Ce n'est pas impossible. Il est tout à fait possible d'avoir 10 fichiers qui entrent en collision les uns avec les autres, mais sont tous entièrement différents. C'est peu probable, mais cela peut arriver, vous devez donc le tester.
Kent Fredric

2
taille du fichier, puis MD5, et ensuite seulement octet pour la vérification des octets.
Brad Gilbert

3
@Kent - Je suis d'accord à 100% avec vous. C'est de la paresse de ne pas tenir compte de quelque chose parce que c'est très peu probable, même aussi peu probable que nous parlons. Je serais ennuyé si certaines de mes données étaient détruites simplement parce que la personne qui a écrit le programme pensait que quelque chose était trop peu probable pour déranger le codage.
Joe Taylor

10

C'est un liner sur les systèmes d'exploitation Unix comme (y compris Linux) ou Windows avec Cygwin installé:

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

md5sum (qui est environ 50% plus rapide) peut être utilisé si vous savez qu'il n'y a pas de collisions délibérément créées (vous auriez plus de chances de gagner 10 loteries majeures que la chance de trouver une collision md5 naturelle).

Si vous voulez voir tous les doublons que vous avez au lieu de les supprimer, changez simplement la unlink $filepartie print $file, "\n".


1
Vous pouvez également utiliser -print0 et xargs-0 pour intercepter des espaces, mais find a également une option -exec qui est utile ici: find. -type f -exec shasum {} \; | trier ... Aussi: Vous ne devez pas utiliser @F (-a) car cela ne fonctionnera pas avec les espaces. Essayez plutôt substr.

Bon appel, géocar. Mise à jour de la réponse avec vos suggestions.

"md5sum (qui est environ 50% plus rapide) peut être utilisé si vous savez qu'il n'y a pas de collisions délibérément créées" - exactement
Greg Dean

6

J'ai utilisé fdupes(écrit en C) et freedups(Perl) sur les systèmes Unix, et ils pourraient également fonctionner sur Windows; il y a aussi d' autres semblables qui sont réclamés au travail sous Windows: dupmerge, liten(écrit en Python), etc.


Les logiciels Perl et Python devraient fonctionner de manière identique sur les systèmes Windows et * nix, en supposant que les détails du système de fichiers n'ont pas d'importance.
CarlF

2

Pour supprimer les images en double sous Windows, consultez DupliFinder. Il peut comparer des images selon une variété de critères tels que le nom, la taille et les informations réelles sur l'image.

Pour d'autres outils pour supprimer les fichiers en double, consultez cet article Lifehacker .


1

Au lieu de DupliFinder, essayez plutôt le projet forké, DeadRinger . Nous avons corrigé une tonne de bugs dans le projet d'origine, ajouté un tas de nouvelles fonctionnalités et amélioré considérablement les performances.


1

Une option peut être Dupkiller .

DupKiller est l'un des outils les plus rapides et les plus puissants pour rechercher et supprimer des fichiers en double ou similaires sur votre ordinateur. Des algorithmes compliqués, intégrés dans son mécanisme de recherche, produisent des résultats élevés - recherche rapide de fichiers. De nombreuses options permettent de personnaliser de manière flexible la recherche.

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.