13

На моем компьютере с Windows, в разных подпапках и с разными именами файлов много дублированных файлов изображений.

Какой скрипт на Python или бесплатную программу вы бы порекомендовали для удаления дубликатов?

(Я читал этот похожий вопрос, но постер там спрашивает о визуальных дубликатах с разными размерами файлов. Мои точные дубликаты с разными именами файлов.)

6 ответов6

17

Не полагайтесь на суммы MD5.

Суммы MD5 не являются надежным способом проверки на наличие дубликатов, они являются лишь способом проверки на наличие различий.

Используйте MD5 для поиска возможных дубликатов кандидатов , а затем для каждой пары, разделяющей MD5

  1. Открывает оба файла
  2. Ищет вперед в этих файлах, пока один не отличается.

Видя, что меня обижают люди, делающие наивные подходы к дублированию идентификатора файла. Если вы собираетесь полностью полагаться на алгоритм хеширования, ради бога, используйте что-то более жесткое, например 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 комбинациями? Я не думаю, что это вероятно.

Наименее Наивный путь

Наименее наивный и самый быстрый способ отсеять дубликаты заключается в следующем.

  1. По размеру : файлы с разным размером не могут быть идентичными. Это занимает мало времени, так как не нужно даже открывать файл.
  2. По MD5 : Файлы с разными значениями MD5/Sha не могут быть идентичными. Это занимает немного больше времени, потому что он должен прочитать все байты в файле и выполнить с ними математические операции, но он ускоряет несколько сравнений.
  3. При отсутствии вышеуказанных различий : Выполните побайтовое сравнение файлов. Это медленный тест для выполнения, поэтому его оставляют до тех пор, пока не будут учтены все другие устраняющие факторы.

Fdupes делает это. И вы должны использовать программное обеспечение, которое использует те же критерии.

10

Это одна строка на Unix-подобных (включая linux) ОС или 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" .

6

Я использовал fdupes (написанные на C) и freedups (Perl) в системах Unix, и они также могут работать в Windows; есть также похожие, которые, как утверждается, работают в Windows: dupmerge , liten (написано на Python) и т. д.

2

Чтобы удалить дубликаты изображений в Windows, взгляните на DupliFinder. Он может сравнивать изображения по различным критериям, таким как имя, размер и фактическая информация об изображении.

Другие инструменты для удаления дубликатов файлов можно найти в этой статье Lifehacker .

1

Одним из вариантов может быть Dupkiller.

DupKiller - один из самых быстрых и мощных инструментов для поиска и удаления дубликатов или похожих файлов на вашем компьютере. Сложные алгоритмы, встроенные в механизм поиска, обеспечивают высокие результаты - быстрый поиск файлов. Множество опций позволяют гибко настраивать поиск.

1

Вместо DupliFinder попробуйте раздвоенный проект DeadRinger. Мы исправили множество ошибок в первоначальном проекте, добавили кучу новых функций и значительно улучшили производительность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .