У меня есть много файлов дублирующегося изображения на моем компьютере Windows в различных подпапках и с различными именами файлов.
Какой сценарий Python или бесплатно распространяемую программу Вы рекомендовали бы для удаления дубликатов?
(Я считал этот подобный вопрос, но плакат там спрашивает о визуальных дубликатах с отличающимися размерами файла. Мои - точные дубликаты с различными именами файлов.)
Не Полагайтесь на суммы MD5.
Суммы MD5 не являются надежным способом проверить на дубликаты, они - только способ проверить на различия.
Используйте MD5s для нахождения возможных дубликатов кандидата, и затем для каждой пары, совместно использующей 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 комбинации? Я не думаю настолько, вероятно.
Наименее наивный путь и самый быстрый путь, для избавлений от дубликатов следующие.
Fdupes делает это. И необходимо использовать программное обеспечение, которое использует те же критерии.
Это - один лайнер на Unix как (включая Linux) Ose или Windows с установленным 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 (который приблизительно на 50% быстрее) может использоваться, если бы Вы знаете, что нет никаких сознательно созданных коллизий (у Вас был бы лучший шанс выиграть 10 главных лотерей, чем шанс найти одну естественную md5 коллизию.)
Если Вы хотите видеть все копирование, Вы имеете вместо того, чтобы удалить их, просто изменяются unlink $file
часть к print $file, "\n"
.
Я использовал fdupes
(записанный в C) и freedups
(Perl) в системах Unix, и они могли бы работать над Windows также; существуют также подобные, которые, как утверждают, работают над Windows: dupmerge
, liten
(записанный в Python), и т.д.
Для удаления дублирующихся изображений в Windows смотрят на DupliFinder. Это может сравнить изображения множеством критериев, такие как имя, размер и информация о действительном образе.
Чтобы другие инструменты удалили дубликаты файлов, смотрят на эту статью Lifehacker.
Вместо DupliFinder попробуйте разветвленный проект вместо этого, DeadRinger. Мы зафиксировали тонну ошибок в исходном проекте, добавили набор новых возможностей и существенно улучшили производительность.
Одной опцией может быть Dupkiller.
DupKiller является одним из самых быстрых и самых мощных инструментов для поиска и удаления дублирующихся или подобных файлов на Вашем компьютере. Сложные алгоритмы, созданные в его механизме поиска, выполняют высокие результаты — быстрый поиск файла. Много опций позволяет гибкой настройке поиска.