Сравнение инструментов с открытым исходным кодом для удаления дубликатов файлов

tl;dr

Мне нужно было убрать дубликаты фотографий из моей личной библиотеки. И поскольку я не мог выбрать, какой из средств поиска дубликатов попробовать, я решил протестировать их все. Среди бесплатных инструментов, которые правильно определили все дубликаты в моем тесте, dupd оказался самым быстрым. В итоге я использовал fastdupes, так как он не требовал компиляции C/C++ на моем NAS.

Почему поиск дубликатов файлов?

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

Можно попробовать с iPhoto или другим графическим интерфейсом, но этот подход слишком медленный для большой библиотеки (у меня более 100 ГБ). Очевидным выбором был поиск инструмента командной строки.

Я быстро понял, что для этой задачи написано слишком много инструментов. И нет простого способа найти, какой из них лучше. Поэтому я решил сравнить скорость большинства из них.

Сравнение скорости

В Википедии есть довольно полный список средств поиска дубликатов файлов. Оттуда я загрузил и установил все бесплатные инструменты командной строки с открытым исходным кодом.

Я исключил из этого сравнения инструменты:

  • который не мог быть легко установлен на моем macbook (например, Makefile нуждался бы в исправлении)
  • оказалась очень ограниченной поддержкой (менее 10 звезд на github, медленная или стагнирующая разработка и т. д.).
  • не имел возможности «пробного запуска» или простого списка дубликатов, но вместо этого пытался удалить или жестко связать дубликаты файлов. Я нахожу такое поведение слишком агрессивным для большинства пользователей. Определенно слишком рискованно бегать по папке с фотографиями моих детей.
  • Наконец, я исключил те инструменты, которые не смогли найти все правильные дубликаты в моей тестовой папке.

Папка была спроектирована так, чтобы содержать 1195 дубликатов в 325 кластерах. Вот результаты, протестированные на 7 ГБ изображений, видео, символических ссылок, небольших файлов и рекурсивно вложенных файлов:

Поскольку я храню свои изображения в отдельном хранилище NAS, также полезно, насколько каждый из этих методов зависит от памяти или процессора:

Вывод

Dupd был явным победителем в скорости, а также с приемлемым объемом памяти. lite и fastdupes занимают второе место и могут быть немного более переносимыми, поскольку не требуют компиляции. Компиляция инструментов C/C++ имеет тенденцию быть немного хрупкой по сравнению с основными дистрибутивами UNIX, что является проблемой при работе на NAS. В итоге я использовал fastdupes.

Интересно посмотреть, как (вероятно) самое известное решение fdupes было также и самым медленным. Хотя он остается одним из немногих инструментов, которые могут выполнять побайтовое сравнение. И самый быстрый, и второй по скорости инструмент полагаются на базы данных SQLite и позволяют вам исследовать дубликаты в интерактивном режиме после их запуска.

Пожалуйста, дайте мне знать, если я забыл какой-либо другой инструмент, который должен был быть в этом списке. Команды, включенные в анализ:

Первоначально опубликовано на elipapa.github.io.