Як знайти (і видалити) дублікати файлів


125

У мене є велика колекція музики, і там є кілька дублікатів. Чи є спосіб знайти дублікати файлів. Як мінімум, роблячи хеш і перевіряючи, чи мають два файли однаковий хеш.

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

Я радий використовувати командний рядок, якщо це найпростіший спосіб.

Відповіді:


138

Я використовую fdupesдля цього. Це програма командної лінії, яку можна встановити із сховищ sudo apt install fdupes. Ви можете назвати це як, fdupes -r /dir/ect/oryі він видрукує список амерів. fdupes також має просту домашню сторінку та статтю у Вікіпедії , де перераховано ще кілька програм.


7
Він також має опцію "-d", яка дозволяє вибрати, яку копію ви хочете зберегти, та видаляє інші (або ви можете зберегти їх, якщо хочете).
Меттью Крамлі

Як я можу скористатися опцією -d, щоб вирішити свою проблему тут
Джон МакКіан Прутт

Чи можна fdupes перераховувати дублікати папок замість дублікатів файлів?
Андерсон Грін

2
Чи можете ви пояснити більш детально, як видалити всі дублікати (залишаючи лише одну копію кожного файлу) у рекурсивному дереві каталогів? Я хочу це зробити автоматично, тобто без необхідності вказувати кожен раз, який файл зберігати. Він повинен просто вибрати один із дублікатів.
бекко

5
fdupes -r . -d -Nслід зберегти перший екземпляр і видалити дуп. Я лише вдало очистив одну папку, використовуючи fdupes . -d -Nне рекурсивно
Саймон Б

61

FSlint має графічний інтерфейс та деякі інші функції. Пояснення алгоритму перевірки дублікатів із їх часто заданих питань:

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


12
Дякую. Зауважте, що назва команди "fslint-gui", а інструменти командного рядка за замовчуванням не знаходяться у $ PATH - вони знаходяться в / usr / share / fslint / fslint. Мене збентежило, коли я не отримав довідки щодо того, в якому пакунку він знаходився, просто запустивши fslint (через / usr / lib / command-not-found).
nealmcb

саме те, що потрібно
Тебе

1
@nealmcb Якщо використовується sudo apt-get install fslint, інсталяція наразі ставиться fslint-guiв шлях, і я можу запустити її з будь-якого місця, просто набравши текст fslint-gui. Ви можете знайти, де fslint-guiживе, ввівши which fslint-gui(це схоже на сценарій Python).
user29020

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, призначений для роботи з знаходженням (тощо).
  12. findrepe : безкоштовний інструмент командного рядка на базі Java, призначений для ефективного пошуку дублікатів файлів, він може здійснювати пошук у блискавках та банках (GNU / Linux, Mac OS X, * nix, Windows)
  13. fdupe : невеликий сценарій, написаний на Perl. Робить свою роботу швидко та ефективно. 1
  14. ssdeep : ідентифікуйте майже однакові файли за допомогою контекстного хешування

4
Чи зможе будь-яка з цих програм знайти дублікати папок (а не лише копії файлів?)
Anderson Green

3
@AndersonGreen rmlintможе знайти дублікати dir . rmlint -T dd
олігофрен

для Ubuntu іншим способом є відкриття файлів, пошук (control-f) для заданого розширення (наприклад, .mp3), а потім сортування за назвою файлу; це дозволить видалити дублікати вручну, і в той же час показати місця дублікатів.
axd

6

Якщо ваше завдання дедуплікації пов'язане з музикою, спочатку запустіть програму picard, щоб правильно визначити та позначити свою музику (щоб ви знайшли дублікати файлів .mp3 / .ogg, навіть якщо їх імена невірні). Зауважте, що Picard також доступний як пакет Ubuntu.

Зробивши це, виходячи з musicip_puidтегу, ви можете легко знайти всі ваші дублікати пісень.


4

Ще один сценарій, який виконує цю роботу, - це rmdupe . Зі сторінки автора:

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



2

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.