Ich möchte doppelte Dateien in einem Verzeichnisbaum erkennen. Wenn zwei identische Dateien gefunden werden, wird nur eines der Duplikate erhalten und die verbleibenden Duplikate werden gelöscht, um Speicherplatz zu sparen.
Doppelte Dateien sind Dateien mit demselben Inhalt, die sich in Dateinamen und Pfad unterscheiden können.
Ich habe daran gedacht, Hash-Algorithmen für diesen Zweck zu verwenden, aber es besteht die Möglichkeit, dass verschiedene Dateien dieselben Hashes haben. Daher benötige ich einen zusätzlichen Mechanismus, der mir mitteilt, dass die Dateien nicht gleich sind, auch wenn die Hashes gleich sind, da ich nicht zwei verschiedene Dateien löschen möchte.
Welchen zusätzlichen schnellen und zuverlässigen Mechanismus würden Sie verwenden?
1 Stimmen
Die Wahrscheinlichkeit einer Hash-Kollision ist äußerst gering. Wenn Sie 100%ige Sicherheit darüber hinaus wünschen, können Sie einfach die vollständigen Dateiinhalte vergleichen - die Leistung ist selten so wichtig.
1 Stimmen
@delnan: Das ist nicht korrekt. Die Wahrscheinlichkeit einer Kollision für eine bestimmte Datei ist gering, für große Dateisammlungen ist sie jedoch viel höher - siehe das Geburtstagsparadoxon als Beispiel. Die Wahrscheinlichkeit, dass zwei Personen von insgesamt 23 am selben Tag Geburtstag haben, beträgt 50%. Die Wahrscheinlichkeit einer Kollision nimmt exponentiell zu, je größer die Sammlung wird.
1 Stimmen
@amit Ich kenne das Geburtstagsparadoxon, deshalb sage ich nicht "die Chancen sind so gering, dass es nicht notwendig ist, zu überprüfen". Auch mein Bauchgefühl sagt mir, dass die Chancen für zwei Dateien so gering sind, dass es hunderte oder tausende von Dateien brauchen würde, um Kollisionschancen >1 zu haben. Aber ja, ich sollte das lieber zuerst überprüfen. Die Tabelle in diesem Artikel (bezüglich Geburtstagsangriff) scheint das zu bestätigen. Wenn ich das richtig lese, erfordert ein perfekter 64-Bit-Hash
1,9 × 10^8
(= 190 Millionen) Dateien selbst für eine Kollisionschance von 0,1%.