Не покладайтеся на суми MD5.
Суми MD5 не є надійним способом перевірити наявність дублікатів, вони лише спосіб перевірити наявність відмінностей.
Використовуйте MD5 для пошуку можливих дублікатів кандидатів , а потім для кожної пари, що ділиться MD5
- Відкриває обидва файли
- Шукає вперед у цих файлах, поки один не відрізнятиметься.
Бачити я отримую downvoted люди роблять наївних підходів до дублікатів файлів ідентичності, якщо ви збираєтеся покладатися цілком на алгоритм хешування, заради бога, використовуйте що - то складніше , як SHA256 або SHA512, принаймні , ви будете зменшити ймовірність розумний ступінь, перевіривши більше біт. MD5 надзвичайно слабкий для умов зіткнення.
Я також раджу людям читати тут списки розсилки під назвою "Перевірка файлів": http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html
Якщо ви скажете, що "MD5 може однозначно ідентифікувати всі файли", ви маєте логічну помилку.
Враховуючи діапазон значень, що мають різну довжину від 40 000 байт довжиною до 100 000 000 000 байт в довжину, загальна кількість комбінацій, доступних до цього діапазону, значно перевищує можливу кількість значень, представлених MD5, вагою всього лише 128 біт довжини.
Представляйте 2 ^ 100 000 000 000 комбінацій лише 2 ^ 128 комбінацій? Я не думаю, що це ймовірно.
Найменший наївний шлях
Найменш наївний спосіб і найшвидший спосіб вилучення дублікатів полягає в наступному.
- За розміром : Файли різного розміру не можуть бути однаковими. Це займає небагато часу, оскільки не потрібно навіть відкривати файл.
- За MD5 : Файли з різними значеннями MD5 / Sha не можуть бути однаковими. Це займе трохи більше часу, оскільки він повинен прочитати всі байти у файлі та виконувати математику на них, але це робить кілька порівнянь швидшими.
- Помилка вищезазначених відмінностей : Виконайте байт-байтове порівняння файлів. Це повільний тест для виконання, тому він залишається до тих пір, поки не будуть розглянуті всі інші усуваючі фактори.
Фдупес це робить. І ви повинні використовувати програмне забезпечення, яке використовує ті самі критерії.