Каков наилучший способ удалить дубликаты файлов изображений с вашего компьютера?

4658
BioGeek

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

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

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

14
Имейте в виду, что даже если все пиксели одинаковы, они все равно могут иметь различную информацию EXIF ​​(измененную программами, которые обрабатывали изображения на некоторой стадии), что создаст проблемы с большинством предлагаемых в настоящее время решений. user12889 14 лет назад 2

6 ответов на вопрос

17
Kent Fredric

Не полагайтесь на суммы 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 делает это. И вы должны использовать программное обеспечение, которое использует те же критерии.

Буквально более вероятно, что ваш жесткий диск волшебным образом уничтожит изображение, чем столкновение MD5. «Представьте 2 ^ 100 000 000 000 комбинаций только с 2 ^ 128 комбинациями» - я согласен с вами здесь. Если бы у него было 2 ^ 100 000 000 000 картинок, MD5 (или почти любой алгоритм хеширования) был бы плохим. Greg Dean 15 лет назад 7
* нет * гарантии, это просто * маловероятно *. Это * не * невозможно. Вполне возможно иметь 10 файлов, которые все сталкиваются друг с другом, но все они совершенно разные. Это маловероятно, но это может произойти, поэтому вы должны проверить это. Kent Fredric 15 лет назад 4
размер файла, затем MD5 и только затем байт для проверки байтов. Brad Gilbert 15 лет назад 2
@Kent - я на 100% согласен с тобой. Это лень игнорировать что-то, потому что это очень маловероятно, даже так маловероятно, как мы говорим. Я был бы раздражен, если бы некоторые из моих данных были уничтожены только потому, что человек, который написал программу, подумал, что что-то слишком маловероятно, чтобы беспокоиться о кодировании. Joe Taylor 13 лет назад 3
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".

Вы также можете использовать -print0 и xargs-0 для перехвата пробелов, но find также имеет опцию -exec, которая полезна здесь: find. -тип f -exec shasum {} \; | sort ... Также: Вы не должны использовать @F (-a), потому что он не будет работать с пробелами. Попробуйте вместо этого substr. 15 лет назад 1
Хороший звонок, геокар. Обновил ответ с вашими предложениями. 15 лет назад 0
«md5sum (который примерно на 50% быстрее) может использоваться, если вы знаете, что нет преднамеренно созданных столкновений» - точно Greg Dean 15 лет назад 0
6
ShreevatsaR

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

Программное обеспечение Perl и Python должно работать одинаково в системах Windows и * nix, предполагая, что детали файловой системы не имеют значения. CarlF 14 лет назад 0
2
Sean

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

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

1

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

1
jhamu

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

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

enter image description here