Was ist die beste Methode, um doppelte Bilddateien von Ihrem Computer zu entfernen?


14

Ich habe viele doppelte Bilddateien auf meinem Windows-Computer, in verschiedenen Unterordnern und mit verschiedenen Dateinamen.

Welches Python-Skript oder Freeware-Programm würden Sie zum Entfernen der Duplikate empfehlen?

(Ich habe diese ähnliche Frage gelesen , aber das dortige Poster fragt nach visuellen Duplikaten mit unterschiedlichen Dateigrößen. Meine sind exakte Duplikate mit unterschiedlichen Dateinamen.)


2
Beachten Sie, dass auch wenn alle Pixel gleich sind, diese möglicherweise unterschiedliche EXIF-Informationen enthalten (die von Programmen geändert wurden, die die Bilder zu einem bestimmten Zeitpunkt verarbeitet haben), was bei den meisten derzeit vorgeschlagenen Lösungen zu Problemen führen kann.
user12889

Antworten:


17

Verlassen Sie sich nicht auf MD5-Summen.

MD5-Summen sind kein zuverlässiger Weg, um nach Duplikaten zu suchen, sondern nur, um nach Unterschieden zu suchen.

Verwenden Sie MD5s, um mögliche Kandidaten- Duplikate zu finden , und dann für jedes Paar, das sich ein MD5 teilt

  1. Öffnet beide Dateien
  2. Sucht in diesen Dateien nach vorne, bis sich eine unterscheidet.

Wenn Sie sich nur auf einen Hash-Algorithmus verlassen, sollten Sie, um Himmels willen, etwas härteres wie SHA256 oder SHA512 verwenden, zumindest verringern Sie die Wahrscheinlichkeit auf ein vernünftiger Grad, indem mehr Bits überprüft werden. MD5 ist für Kollisionsbedingungen außerordentlich schwach.

Ich rate den Lesern auch, Mailinglisten mit dem Titel "Dateiprüfung" zu lesen: http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Wenn Sie sagen "MD5 kann alle Dateien eindeutig identifizieren", liegt ein logischer Fehler vor.

Bei einer Reihe von Werten, von unterschiedlicher Länge von 40.000 Bytes lang zu 100.000.000.000 Bytes in der Länge, die Gesamtzahl der Kombinationen zur Verfügung , um diesen Bereich erheblich übersteigt die mögliche Anzahl der Werte , die von MD5 dargestellt, in ein Gewicht von gerade einmal 128 Bit Länge.

Stellen Sie 2 ^ 100,000,000,000 Kombinationen mit nur 2 ^ 128 Kombinationen dar? Das halte ich nicht für wahrscheinlich.

Der am wenigsten naive Weg

Der am wenigsten naive und schnellste Weg, um Duplikate auszusortieren, ist der folgende.

  1. Nach Größe : Dateien mit unterschiedlicher Größe können nicht identisch sein. Dies nimmt nur wenig Zeit in Anspruch, da die Datei nicht einmal geöffnet werden muss.
  2. Mit MD5 : Dateien mit unterschiedlichen MD5 / Sha-Werten können nicht identisch sein. Dies dauert etwas länger, da alle Bytes in der Datei gelesen und berechnet werden müssen, aber es macht mehrere Vergleiche schneller.
  3. Fehlschlagen der obigen Unterschiede : Führen Sie einen byteweisen Vergleich der Dateien durch. Dies ist ein langsamer Test, weshalb er erst ausgeführt wird, nachdem alle anderen Eliminierungsfaktoren berücksichtigt wurden.

Fdupes macht das. Und Sie sollten Software verwenden, die dieselben Kriterien verwendet.


7
Es ist buchstäblich wahrscheinlicher, dass Ihre Festplatte ein Image auf magische Weise zerstört, als dass MD5 kollidiert. "Stellen Sie 2 ^ 100,000,000,000 Kombinationen mit nur 2 ^ 128 Kombinationen dar" - da stimme ich Ihnen zu. Wenn er 2 ^ 100,000,000,000 Bilder hätte, wäre MD5 (oder fast jeder Hash-Algorithmus) schlecht.
Greg Dean

4
Es gibt keine Garantie, es ist einfach unwahrscheinlich . Es ist nicht unmöglich. Es ist durchaus möglich, 10 Dateien zu haben, die alle miteinander kollidieren, aber alle völlig unterschiedlich sind. Das ist unwahrscheinlich, aber es kann vorkommen, deshalb müssen Sie es testen.
Kent Fredric

2
Dateigröße, dann MD5 und erst dann Byte für Byte-Prüfung.
Brad Gilbert

3
@ Kent - Ich stimme dir zu 100% zu. Es ist faul, etwas zu ignorieren, weil es sehr unwahrscheinlich ist, auch wenn es so unwahrscheinlich ist, wie wir es hier ansprechen. Ich würde mich ärgern, wenn einige meiner Daten zerstört würden, nur weil die Person, die das Programm geschrieben hat, der Meinung war, dass etwas zu unwahrscheinlich ist, um es zu programmieren.
Joe Taylor

10

Es ist ein One-Liner-Betriebssystem unter Unix (einschließlich Linux) oder Windows mit Cygwin:

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 (das ist ungefähr 50% schneller) kann verwendet werden, wenn Sie wissen, dass es keine absichtlich verursachten Kollisionen gibt.

Wenn Sie alle Dups sehen möchten, die Sie haben, anstatt sie zu entfernen, ändern Sie einfach das unlink $fileTeil in print $file, "\n".


1
Sie können -print0 und xargs-0 auch verwenden, um Leerzeichen abzufangen, aber find hat auch eine -exec-Option, die hier nützlich ist: find. -type f -exec shasum {} \; | sort ... Außerdem: Sie sollten @F (-a) nicht verwenden, da dies nicht mit Leerzeichen funktioniert. Versuchen Sie stattdessen substr.

Guter Anruf, Geocar. Aktualisiert die Antwort mit Ihren Vorschlägen.

"md5sum (das ist ungefähr 50% schneller) kann verwendet werden, wenn Sie wissen, dass es keine absichtlich verursachten Kollisionen gibt" - genau
Greg Dean

6

Ich habe fdupes(in C geschrieben) und freedups(Perl) auf Unix-Systemen verwendet, und sie funktionieren möglicherweise auch unter Windows. es gibt auch ähnliche , die Arbeit auf Windows geltend gemacht werden: dupmerge, liten(geschrieben in Python), usw.


Perl- und Python-Software sollten auf Windows- und * nix-Systemen identisch funktionieren, vorausgesetzt, dass Details des Dateisystems keine Rolle spielen.
CarlF

2

Um doppelte Bilder unter Windows zu entfernen, besuchen Sie DupliFinder. Es kann Bilder anhand verschiedener Kriterien wie Name, Größe und tatsächliche Bildinformationen vergleichen.

Weitere Tools zum Entfernen doppelter Dateien finden Sie in diesem Lifehacker- Artikel.


1

Versuchen Sie statt DupliFinder das Forked- Projekt DeadRinger . Wir haben eine Menge Fehler im ursprünglichen Projekt behoben, eine Reihe neuer Funktionen hinzugefügt und die Leistung drastisch verbessert.


1

Eine Option kann Dupkiller sein .

DupKiller ist eines der schnellsten und leistungsfähigsten Tools zum Suchen und Entfernen doppelter oder ähnlicher Dateien auf Ihrem Computer. Komplizierte Algorithmen, die in den Suchmechanismus integriert sind, führen zu hohen Ergebnissen - schnelle Dateisuche. Viele Optionen ermöglichen eine flexible Anpassung der Suche.

Bildbeschreibung hier eingeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.