Как найти (и удалить) дубликаты файлов

125

У меня большая музыкальная коллекция, и там есть несколько дубликатов. Есть ли способ найти дубликаты файлов. Как минимум, сделав хеш и увидев, имеют ли два файла одинаковый хеш.

Бонусные баллы за поиск файлов с тем же именем, кроме расширения - я думаю, что у меня есть несколько песен в форматах mp3 и ogg.

Я счастлив использовать командную строку, если это самый простой способ.

Хэмиш Даунер
источник

Ответы:

138

Я использую fdupesдля этого. Это программа командной строки, которую можно установить из репозиториев с помощью sudo apt install fdupes. Вы можете назвать это как, fdupes -r /dir/ect/oryи он распечатает список обманщиков. У fdupes также есть простая домашняя страница и статья в Википедии , в которой перечислены еще несколько программ.

QBi
источник
7
Он также имеет опцию «-d», которая позволяет вам выбрать, какую копию вы хотите сохранить, и удаляет другие (или вы можете сохранить их все, если хотите).
Мэтью Крамли
Как я могу использовать опцию -d, чтобы исправить мою проблему здесь
Джон Маккин Пруитт
Возможно ли для fdupes перечислить дубликаты папок вместо дубликатов файлов?
Андерсон Грин
2
Можете ли вы объяснить более подробно, как удалить все дубликаты (оставляя только одну копию каждого файла) в рекурсивном дереве каталогов? Я хочу сделать это автоматически, то есть без необходимости каждый раз указывать, какой файл сохранить. Стоит просто выбрать один из дубликатов.
Becko
5
fdupes -r . -d -Nследует сохранить первый экземпляр и удалить дубликаты. Я только что успешно очистил одну папку, используя fdupes . -d -Nне рекурсивно
Simon B
61

FSlint имеет графический интерфейс и некоторые другие функции. Объяснение алгоритма проверки дубликатов из их FAQ:

1. exclude files with unique lengths
2. handle files that are hardlinked to each other
3. exclude files with unique md5(first_4k(file))
4. exclude files with unique md5(whole file)
5. exclude files with unique sha1(whole file) (in case of md5 collisions).

FSlint Установить fslint

Dominik
источник
12
Благодарю. Обратите внимание, что имя команды - "fslint-gui", а инструменты командной строки не находятся в $ PATH по умолчанию - они находятся в / usr / share / fslint / fslint. Я был сбит с толку, когда не получил справки о том, в каком пакете он находился, просто запустив fslint (через / usr / lib / command-not-found).
nealmcb
именно то, что нужно
Tebe
1
@nealmcb При использовании sudo apt-get install fslint, установка в настоящее время помещает fslint-guiпуть, и поэтому я могу запустить его из любого места, просто набрав fslint-gui. Вы можете найти, где fslint-guiживет, набрав which fslint-gui(это выглядит как скрипт Python).
user29020 25.11.14
55

Список того programs/scripts/bash-solutions, что можно найти дубликаты и запустить под nix:

  1. dupedit : сравнивает много файлов одновременно без контрольной суммы. Позволяет избежать сравнения файлов с самими собой, когда несколько путей указывают на один и тот же файл.
  2. dupmerge : работает на разных платформах (Win32 / 64 с Cygwin, * nix, Linux и т. д.)
  3. dupseek : Perl с алгоритмом, оптимизированным для уменьшения числа операций чтения.
  4. fdf : основан на Perl / c и работает на большинстве платформ (Win32, * nix и, возможно, другие). Использует алгоритмы MD5, SHA1 и другие контрольные суммы
  5. freedups : сценарий оболочки, который выполняет поиск в указанных вами каталогах. Когда он находит два одинаковых файла, он жестко связывает их вместе. Теперь два или более файлов все еще существуют в своих соответствующих каталогах, но только одна копия данных хранится на диске; обе записи каталога указывают на одни и те же блоки данных.
  6. fslint : имеет интерфейс командной строки и графический интерфейс.
  7. liten : инструмент командной строки Pure Python для дедупликации и библиотека, использующая контрольные суммы md5 и новый алгоритм сравнения байтов. (Linux, Mac OS X, * nix, Windows)
  8. liten2 : переписан оригинальный Liten, все еще инструмент командной строки, но с более быстрым интерактивным режимом с использованием контрольных сумм SHA-1 (Linux, Mac OS X, * nix)
  9. rdfind : один из немногих, которые ранжируют дубликаты на основе порядка входных параметров (папок для сканирования), чтобы не удалять из «оригинальных / хорошо известных» источников (если дано несколько каталогов). Использует MD5 или SHA1.
  10. rmlint : быстрый поиск с интерфейсом командной строки и множеством опций для поиска других ссылок (использует MD5)
  11. ua : инструмент командной строки Unix / Linux, предназначенный для работы с find (и т.п.).
  12. findrepe : бесплатный инструмент командной строки на основе Java, предназначенный для эффективного поиска дубликатов файлов, он может выполнять поиск по zip и jar- файлам (GNU / Linux, Mac OS X, * nix, Windows)
  13. fdupe : небольшой скрипт, написанный на Perl. Делать свою работу быстро и качественно. 1
  14. ssdeep : идентифицировать практически идентичные файлы, используя кусочно- хешируемый контекстный запуск
V2R
источник
4
Может ли какая-либо из этих программ находить дубликаты папок (а не только дубликаты файлов?)
Андерсон Грин,
3
@AndersonGreen rmlintможет найти дубликаты папок. rmlint -T dd
олигофрен
для Ubuntu другой способ - открыть файлы, выполнить поиск (control-f) по заданному расширению (например, .mp3), а затем отсортировать по имени файла; это позволит удалять дубликаты вручную и одновременно показывать местонахождение дубликатов.
Axd
6

Если ваша задача дедупликации связана с музыкой, сначала запустите приложение picard, чтобы правильно идентифицировать и пометить вашу музыку (чтобы вы могли найти дубликаты файлов .mp3 / .ogg, даже если их имена неверны). Обратите внимание, что picard также доступен в виде пакета Ubuntu.

Это сделано, основываясь на musicip_puidтеге, вы можете легко найти все дубликаты песен.

ΤΖΩΤΖΙΟΥ
источник
4

Другой скрипт, который выполняет эту работу - это rmdupe . Со страницы автора:

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

Girardengo
источник
3

Ты пробовала

finddup

или же

finddup -l

Я думаю, это работает нормально.

xerostomus
источник
2

Для музыки, связанной с дублированием, идентификация и удаление Picard и Jaikoz от http://musicbrainz.org/ является лучшим решением. Jaikoz Я считаю, что автоматически помечает вашу музыку на основе данных файла песни. Вам даже не нужно название песни, чтобы идентифицировать песню и присвоить ей все метаданные. Хотя бесплатная версия может пометить только ограниченное количество песен за один прогон, вы можете запускать ее столько раз, сколько захотите.

Yathi
источник