Как найти и удалить дубликаты файлов в Linux с помощью fdupes

Кратко о fdupes
fdupes — это консольная утилита для поиска и удаления дубликатов файлов в Linux. Вкратце: она группирует файлы по совпадающим контрольным суммам (MD5), а затем подтверждает совпадение побайтовым сравнением, чтобы исключить ложные срабатывания.
Определение в одну строку: fdupes сравнивает содержимое файлов и показывает наборы идентичных файлов для дальнейших действий (удаление, замена ссылками или анализ).
Важное: прежде чем удалять файлы, делайте резервную копию или экспортируйте результаты поиска в файл для проверки.
Основные сценарии использования (основные команды)
- Обязательные флаги, описанные в этой статье: -r (рекурсивно), -n (исключить нулевой размер), -d (удаление интерактивно), -N (удаление без запроса — оставить первый файл в каждом наборе), -m (вывод статистики), -h (помощь).
- Для безопасной работы сначала выводите результаты в файл: fdupes /путь > results.txt и просматривайте.
Как установить fdupes
На Ubuntu / Debian:
sudo apt install fdupesНа Fedora / CentOS / RHEL (dnf):
sudo dnf install fdupesНа Arch Linux / Manjaro:
sudo pacman -S fdupesЕсли пакет отсутствует в репозитории, проверьте исходники на GitHub под лицензией MIT и соберите из исходников.
Поиск дубликатов: базовые примеры
Найти дубликаты в каталоге (без рекурсии):
fdupes ~/DocumentsЕсли дубликаты найдены, fdupes выведет наборы файлов, каждый набор отделён пустой строкой. Пример вывода можно увидеть на изображении ниже.

Рекурсивный поиск (включая подкаталоги):
fdupes -r ~/Documents
Исключение пустых (нуль-байт) файлов — полезно, если в результате много пустых файлов, которые вас не интересуют:
fdupes -n ~/Documents
Запись вывода в файл для последующего анализа:
fdupes /home/Documents > output.txtСводка по дубликатам (количество наборов, суммарный объём) — флаг -m:
fdupes -m ~/Documents
Справка по утилите:
fdupes -h
Удаление дубликатов
Интерактивное удаление: fdupes предлагает сохранить один или несколько файлов в каждом наборе, остальные будут удалены.
fdupes -d ~/DownloadsПосле выполнения команда выведет наборы и попросит выбрать файлы для сохранения — вводите номера через запятую или одно число.
Пример: сохранить файлы 1,3 и 5 в наборе:
1,3,5Автоматическое удаление с сохранением первого файла в каждом наборе (внимание — без подтверждения):
fdupes -d -N ~/DocumentsСовет: сначала запустите команду без -d и сохраните список, чтобы вручную проверить потенциально удаляемые файлы.
Важно о замене на жёсткие ссылки: fdupes может заменить дубликаты жёсткими ссылками, чтобы сохранять только один инод, если это поддерживает файловая система. Перед такой операцией убедитесь, что вы понимаете последствия: восстановление отдельных копий станет невозможным без резервной копии.
Когда fdupes может «не подойти» или дать некорректные ожидания
- Разные файловые системы: замена на жёсткие ссылки невозможна между разными смонтированными файловыми системами; операция только в пределах одной FS.
- Символьные ссылки (symlink) и жёсткие ссылки: поведение зависит от опций и от того, рассматриваются ли ссылки как отдельные объекты. Проверяйте вывод перед удалением.
- Метаданные и временные метки: fdupes сравнивает содержимое, а не время модификации или права доступа; то есть файлы с одинаковым содержимым, но разными метаданными, будут считаться дубликатами.
- Отсутствие блокировки во время работы: если файлы активно изменяются в процессе сканирования, результаты могут быть некорректными.
Альтернативы и когда выбирать другую утилиту
- rmlint — более гибкая и быстрая утилита с большим набором правил и возможностью создания отчётов и скриптов для исправления.
- dupeGuru — GUI-инструмент, полезен пользователям на рабочем столе (кроссплатформенный).
- fslint — набор утилит с графическим интерфейсом (иногда не поддерживается в новых дистрибутивах).
Выбор зависит от объёма данных, требований к автоматизации и предпочтения GUI/CLI.
Пошаговый SOP для безопасного удаления дубликатов (Playbook)
- Подготовка: определить каталоги для проверки. Создайте резервную копию критичных данных.
- Сканирование: fdupes -r -n /путь > results.txt
- Верификация: вручную откройте results.txt, особенно большие файлы и файлы в системных папках.
- Тестовая выборка: для пары наборов выполните ручную проверку содержимого (cmp или md5sum).
- Удаление: fdupes -d /путь и интерактивно подтверждайте или fdupes -d -N /путь для автоматизации.
- Проверка: просмотрите журнал shell и убедитесь в ожидаемом освобождении места.
- Резервное копирование итогов: сохраните итоговый список удалённых файлов и используйте snapshot/RSYNC, если нужно откатиться.
Критерии приёмки
- Все подтверждённые дубликаты были удалены/заменены согласно принятой политике.
- Сервисы и приложения не потеряли доступа к нужным файлам.
- Резервная копия позволила восстановить файлы в случае ошибки.
Роли и чек-листы
Для системного администратора:
- Не запускать массовое удаление без резервной копии сервера.
- Исключать каталоги с системными файлами.
- Проверять операции на тестовом разделе.
Для домашнего пользователя:
- Сканировать сначала каталоги пользователя (Downloads, Pictures, Music).
- Открывать результаты перед удалением.
Для фотографа/медиаменеджера:
- Сравнивать файлы по размеру и визуально проверять наборы перед удалением.
- Использовать EXIF/метаданные как дополнительную проверку, если надо сохранить разные версии.
Тесты и критерии приёмки
- Тест 1: Сканирование каталога с известными копиями — fdupes должен вывести все наборы.
- Тест 2: Исключение пустых файлов — опция -n убирает нулевые файлы.
- Тест 3: Рекурсивный поиск — опция -r должна найти дубликаты в подкаталогах.
- Тест 4: Интерактивное удаление — после fdupes -d выбранные файлы удалены, сохранённые — нет.
Ментальные модели (как fdupes работает)
- Хеширование: файлы группируются по MD5 (быстрая фильтрация).
- Побайтовое сравнение: для групп с одинаковым хешем выполняется точная проверка, чтобы исключить коллизии.
- Действие: на основе подтверждённых групп предлагается удалить дубликаты или заменить их ссылками.
Эта модель помогает понять, почему утилита быстрая и почему точная.
Безопасность и приватность
- Запускать как обычный пользователь, а не под root, если сканируете пользовательские каталоги.
- Удаление данных может привести к утрате персональной информации — создавайте резервную копию перед массовыми операциями.
- Жёсткие ссылки сохраняют содержимое, но объединяют inode: это меняет модель восстановления — учтите это в политике хранения персональных данных.
Совместимость и ограничения файловых систем
- Жёсткие ссылки возможны только в пределах одной файловой системы.
- Если вы сканируете смонтированные внешние диски (NTFS через ntfs-3g, exFAT через FUSE), поведение может отличаться — тестируйте на небольших выборках.
Итог и рекомендации
fdupes — надёжный инструмент для быстрой идентификации и удаления дубликатов по содержимому. Используйте его в связке с резервным копированием и проверкой результатов, особенно при автоматическом удалении. Для сложных политик очистки рассмотрите rmlint или GUI-решения для предварительного просмотра.
Краткое резюме:
- Сканируйте рекурсивно: -r
- Исключайте пустые файлы: -n
- Интерактивное удаление: -d
- Автоматическое удаление без запроса: -d -N
Если вам нужно восстановление после ошибки, используйте резервную копию. При замене на жёсткие ссылки помните об ограничениях файловой системы.
Дополнительно: схема выбора подхода к удалению дубликатов (decision tree)
flowchart TD
A[Начать: нужно удалить дубликаты?] --> B{Каталог небольшой?}
B -- Да --> C[Использовать fdupes интерактивно]
B -- Нет --> D{Нужна автоматизация?}
D -- Да --> E[Сформировать список, протестировать, затем fdupes -d -N]
D -- Нет --> C
C --> F{Требуется GUI-просмотр?}
F -- Да --> G[Использовать dupeGuru или fslint]
F -- Нет --> H[Проверить результаты, сделать backup]
E --> H
G --> H
H --> I[Выполнить удаление и мониторинг дискового пространства]Однострочный глоссарий
- MD5: криптографическая хеш-функция, используемая для предварительной группировки файлов.
- Жёсткая ссылка: ссылка на один и тот же inode; несколько имён — один и тот же файл.
- Рекурсивный поиск: обход каталогов и подкаталогов.
- Нулевой файл: файл с размером 0 байт.
Спасибо за внимание. Если нужно, могу подготовить готовый чек-лист для конкретного каталога или сценария (сервер, фототека, резервные копии).
Похожие материалы
Как отключить Handoff на Mac, iPhone и Apple Watch
Установка Apache Tomcat 10 на Ubuntu 20.04
Отключить иллюстрации в строке поиска Windows
Как сообщить о посте или профиле в Facebook
SMTP в Python: отправка писем через Gmail