duff — это Duplicate file finder для Unix-подобных систем: компактная консольная программа, которая ищет одинаковые файлы по содержимому, умеет работать рекурсивно, читать список путей из stdin, выводить кластеры дублей и переключаться в режим, где показывает только лишние копии. Утилита сразу делает ставку не на визуальную оболочку, а на предсказуемую работу в терминале, точные параметры запуска и удобство в shell-сценариях.
Это важный момент для всего обзора: duff не является визуальным чистильщиком диска, не пытается маскироваться под менеджер хранения и не превращает поиск дублей в мастер из нескольких окон. Программа решает очень конкретную задачу — находит duplicate files в заданном наборе файлов и каталогов, после чего либо показывает группы совпадений, либо помогает встроить результат в дальнейшую обработку через find, xargs и shell.
Именно поэтому duff особенно хорошо раскрывается там, где у пользователя уже есть каталог с архивами, резервными копиями, выгрузками проектов, коллекциями документов, музыки, фотографий или копиями рабочих директорий. В таких случаях нужен не красивый интерфейс, а инструмент, который можно запустить точно по нужному пути, ограничить по шаблонам, корректно обработать имена с пробелами и затем превратить вывод в понятный технический workflow.
Скачать duff
- Оптимизация системы
- Очистка мусора
- Ускорение ПК
- Командная строка
- Сложно новичкам
- Нет GUI-интерфейса
Что такое duff и чем он отличается от большинства duplicate finder
duff — это утилита, которая сообщает кластеры дубликатов: в обычном режиме она печатает заголовок кластера, а затем список файлов, которые считаются одинаковыми; в excess mode заголовок убирается, а на экран выводятся все файлы, кроме одного, оставленного в группе. Это сразу задаёт характер программы: она не скрывает логику работы, а показывает результат в форме, удобной для чтения человеком и для обработки в скриптах.
Важная особенность duff в том, что это вполне конкретный инструмент со своей моделью поведения. У него нет встроенного предпросмотра изображений, нет панели выбора оригинал / копия мышкой, нет внутренней корзины и нет системы визуальных фильтров. Зато есть точные режимы -r, -e, -0, -t, -d, -p, -z, настройка cluster header через -f, а также возможность читать пути из stdin, если список файлов готовит другая команда.
За счёт этого duff очень хорошо вписывается в типичный Linux- и Unix-сценарий: одна команда собирает набор файлов, вторая находит дубликаты, третья превращает результат в отчёт или осторожное действие. Если нужен поиск дубликатов файлов в Linux без лишнего GUI-слоя, duff ощущается именно как та утилита, которая делает ровно то, что от неё требуется, и не больше.
Какие задачи duff решает лучше всего
В реальной работе duff полезен не только тогда, когда пользователь хочет освободить место. Его сильная сторона — поиск повторяющихся файлов в структурах, где копии появляются как побочный эффект нормальной работы: после синхронизаций, ручного копирования, миграции каталогов, объединения архивов, копирования мультимедиа с разных устройств или хранения нескольких копий проекта в соседних директориях.
Программа особенно уместна в таких сценариях:
-
проверка каталога загрузок, куда один и тот же файл мог попасть несколько раз;
-
анализ резервных копий, где важны не имена, а совпадение содержимого;
-
поиск дублей в исходниках и документации перед рефакторингом или чисткой архива;
-
поиск одинаковых медиафайлов в больших деревьях каталогов;
-
подготовка списка лишних копий перед ручным удалением;
-
автоматизация поиска дублей через shell-пайплайны.
При этом duff не изображает из себя систему интеллектуального дедупа. Он не выбирает лучшую копию по содержимому превью, не сравнивает изображения по визуальному сходству и не объединяет аудиофайлы по тегам. Если задача звучит как найти одинаковые файлы по содержимому и аккуратно показать результат в терминале, тогда duff попадает точно в цель. Если же нужен поиск похожих картинок, похожих видео или музыкальных дублей по метаданным, это уже территория других инструментов.
Интерфейс duff: здесь вся логика находится в командной строке
Интерфейс duff — это сам синтаксис команды, вывод в терминал и режимы формирования результата. Утилита запускается в форме duff [-0HLPaeqprtz] [-d function] [-f format] [-l limit] [file ...], а если путь не указан, она читает имена файлов из stdin. Именно это и делает duff удобной консольной программой для поиска одинаковых файлов: список можно передать напрямую, сформировать через find или собрать в более сложной Unix-цепочке.
С точки зрения ежедневного использования наиболее важны несколько параметров. -r включает рекурсивный обход каталогов; -e переводит утилиту в excess mode; -0 заставляет duff читать и печатать пути с нулевыми разделителями; -d выбирает digest function; -t включает thorough mode; -p переводит программу в physical mode; -z исключает пустые файлы из числа дублей. Это не дополнительные галочки, а основной язык общения с программой.
Отдельно стоит отметить, что duff не следует за симлинками на файлы, а параметры -H, -L и -P относятся только к каталогам. По умолчанию используется -P, то есть симлинки не разворачиваются. Для пользователя это практично: утилита не начинает неожиданно уходить в дополнительные деревья директорий и ведёт себя заметно более предсказуемо при работе с живой файловой системой.
Установка и подготовка к работе
В Linux duff обычно встречается как пакет в репозиториях дистрибутивов, а если нужен source build, проект собирается стандартной autotools-цепочкой: autoreconf -i, ./configure, make, далее установка в систему.
Для практического старта после установки достаточно двух вещей: убедиться, что команда вызывается из терминала, и сразу посмотреть краткую справку. Даже если duff планируется использовать дальше через shell-скрипт, на первом этапе полезно понять её естественный вывод, потому что вся дальнейшая логика — normal mode, excess mode, custom header, null-safe pipeline — вырастает именно из этого формата.
duff хорошо подходит и для настольной системы, и для сервера без графической оболочки. Как инструмент для Linux и Unix-подобных систем он не требует отдельного графического окружения, а значит, спокойно вписывается в удалённые сеансы, tmux/screen, SSH-сценарии и cron-задачи, где нужно не окно, а понятный поток результатов.
Как duff определяет дубликаты
Смысл duff не в сравнении имён, а в сравнении содержимого. Утилита использует SHA-семейство digest-функций как часть проверки совпадений, а выбор конкретного алгоритма задаётся параметром -d. Поддерживаются sha1, sha256, sha384 и sha512; по умолчанию используется sha1. Для типовой работы этого вполне достаточно, а при желании можно переключиться на более тяжёлый digest.
Если нужен максимально осторожный режим, есть -t — thorough mode. В нём duff перестаёт доверять одному только digest как окончательной гарантии равенства и сравнивает совпавшие по размеру файлы побайтно. На практике это именно тот режим, который выбирают, когда важнее консервативная точность, чем максимальная скорость.
Ещё один полезный механизм — sampling limit через -l. Если размер файла равен или превышает заданный порог, duff сначала берёт несколько байтов из начала каждого файла, а уже потом считает полный digest. Это чистая оптимизация: она не меняет логику того, какие файлы считаются дубликатами, а лишь помогает сделать проверку рациональнее на больших наборах данных.
Из-за такой модели duff хорошо работает как утилита для удаления дубликатов в широком смысле, но с одним важным уточнением: сама программа в обычном режиме находит и показывает группы, а удаление чаще всего делается уже в связке с другими командами. Это сильная сторона для опытного пользователя и ограничение для новичка: всё прозрачно и контролируемо, но решение о действии остаётся за вами.
Первый запуск: как выглядит обычная работа duff
Самый естественный сценарий — запустить duff на одном каталоге рекурсивно и посмотреть, как именно она раскладывает результат на кластеры. В таком режиме каждая группа начинается заголовком с количеством файлов, размером и digest, а затем ниже идут пути всех дублей в этой группе. Это очень удачный формат для ручной проверки: ещё до удаления видно, сколько копий найдено, какого они размера и где лежат.
Команда для первого запуска обычно выглядит так:
duff -r /путь/к/каталогу
Рекурсивный поиск дубликатов через -r — это база. Без него duff работает только с тем набором файлов и директорий, который вы ей передали, а с -r проходит по подкаталогам и превращается в полноценный duplicate file finder для всего дерева.
Практический плюс normal mode в том, что программа не давит пользователя потоком лишних файлов без контекста. Напротив, она показывает группы целиком. Для повседневной диагностики это лучше, чем сразу получать перечень под удаление: сначала понятно, какие именно копии совпали, а уже потом можно принимать решение. Особенно это важно при работе с проектами, архивами фото и бэкапами, где одинаковое содержимое не всегда означает, что любую копию можно бездумно убрать.
Ключевые параметры duff и то, как они ведут себя в реальной работе
-r: рекурсивный обход директорий
Если duff запускается на каталоге без -r, она не идёт глубже. Параметр -r включает полный рекурсивный поиск по всем указанным директориям. Для поиска повторяющихся файлов в каталоге и его подкаталогах это практически обязательный режим.
На практике именно -r превращает duff из утилиты точечной проверки в рабочий инструмент для домашней папки, архива проекта, медиатеки или каталога резервных копий. Большинство реальных дублей лежит не в одном уровне дерева, а в соседних ветках — например, backup, old, final, export, copy, sync.
-a: скрытые файлы и каталоги
По умолчанию скрытые файлы и каталоги при рекурсивном поиске не включаются. Параметр -a меняет это поведение. Если вы работаете только с пользовательскими документами, отсутствие скрытых директорий в сканировании обычно полезно: duff не лезет в технические области без необходимости.
Но бывают сценарии, когда -a нужен: резервные копии dotfiles, рабочие деревья с конфигурациями, контейнерные окружения, сборки, где важные дубликаты лежат именно в скрытых папках. Здесь duff становится уже не просто поиском дублей, а средством аудита всей файловой структуры, включая невидимую часть.
-0: корректная работа с пробелами и нестандартными символами
Один из самых полезных параметров duff — -0. Если имена файлов поступают из stdin, программа считает их null-terminated. Если же duff сама печатает результаты, она также завершает пути и cluster header нулевыми символами, а не переводом строки. Для файловых наборов с пробелами, табами и другими сложными именами это правильный, взрослый способ работы.
В практическом Linux-workflow это значит, что duff умеет быть null-safe. Если вы строите pipeline через find -print0, потом запускаете duff -0, а затем передаёте результат в xargs -0, имена файлов не ломаются на пробелах и спецсимволах. Для автоматизации поиска дублей через shell это не удобная мелочь, а необходимая защита от грубых ошибок.
-e: excess mode
-e переводит программу в excess mode. В этом режиме duff больше не печатает заголовки групп, а для каждого кластера выводит все файлы, кроме одного. То есть normal mode отвечает на вопрос какие группы дубликатов найдены, а excess mode — на вопрос какие копии считаются лишними.
С практической точки зрения это важнейший параметр для полуавтоматической чистки. Но у него есть принципиальное ограничение: duff не обещает, что сохранённая копия будет именно той, которая нравится пользователю. Этот режим полезен тогда, когда важен сам факт удаления дублей, а не выбор конкретного файла в группе. Поэтому -e хорош для безличных архивов и машинных наборов данных, но требует осторожности в пользовательских коллекциях.
-d function: выбор digest-функции
Параметр -d задаёт алгоритм хеширования: sha1, sha256, sha384 или sha512. Это делает duff гибкой утилитой поиска одинаковых файлов по хэшу и содержимому. В повседневной практике большинство пользователей не уйдёт дальше умолчаний, но сама возможность выбора полезна в средах, где есть собственные требования к стратегии сравнения.
-t: thorough mode
Если вы хотите, чтобы утилита после совпадения размеров не ограничивалась digest-частью проверки, нужен -t. В этом режиме duff сравнивает файлы byte by byte. По сути, это режим максимальной аккуратности для тех случаев, когда важнее надёжность, чем темп работы. Для каталогов с критичными документами или инженерными артефактами именно этот режим выглядит наиболее уместно.
-l limit: sampling limit
-l задаёт минимальный размер файла, с которого начинает работать предварительное sampling-сравнение первых байтов перед полным digest. Это optimisation-level настройка. Она нужна не всем, но на больших массивах данных позволяет тонко настраивать поведение duff без изменения сути результата.
-p: physical mode и жёсткие ссылки
-p заставляет duff рассматривать физические файлы, а не hard links как отдельные копии. В результате несколько жёстких ссылок на один и тот же physical file не будут показаны как дубликаты. Для Linux-систем, где hard links используются осознанно, это очень важный режим: иначе отчёт может выглядеть правдоподобно, но по факту не показывать реальное освобождение пространства.
-z: пустые файлы
-z отключает объединение пустых файлов в кластеры дублей. Это логичное поведение для многих задач: нулевые файлы часто встречаются как служебные маркеры, шаблоны, placeholders, результаты неудачных экспортов или элементы технических каталогов. В большинстве рабочих сценариев видеть сотни одинаковых нулевых файлов в отчёте просто не нужно.
-f format: формат cluster header
Параметр -f меняет заголовок кластера. Доступны подстановки %n, %d, %i, %s, %%; при -t заголовок по умолчанию отличается, потому что digest не вычисляется. Это одна из самых сильных сторон duff как инструмента для shell-автоматизации: можно оставить привычный human-readable заголовок, можно убрать его полностью, а можно вывести только то, что нужно для дальнейшей обработки.
Например, когда вы хотите быстро видеть только количество файлов в группе, duff может печатать вместо длинного описания просто число. Такой режим особенно полезен при ручном анализе больших массивов: взгляд не цепляется за digest, а сразу понимает размер группы.
-H, -L, -P: симлинки на каталоги
-H — следовать за символическими ссылками, указанными в командной строке, -L — следовать за всеми символическими ссылками, -P — не следовать ни за какими. По умолчанию используется -P. Важно помнить, что речь идёт только о директориях: симлинки на файлы duff не разворачивает. Для системной аккуратности это правильное решение, потому что программа не подменяет фактическую структуру дерева скрытым обходом чужих веток.
-q, -h, -v
-q убирает предупреждения и ошибки, -h показывает помощь, -v — сведения о программе. Для интерактивного использования они вторичны, а вот в скриптах -q бывает очень полезен: duff даёт только полезный поток данных без лишнего шума, особенно если вывод дальше парсится следующей командой.
Практические сценарии использования
Поиск дублей во всей пользовательской директории
Если задача — быстро понять, где копятся одинаковые файлы в домашней папке, типичный запуск выглядит так:
duff -r ~/Downloads
или
duff -r ~/Documents
Такой запуск хорош тем, что duff сразу показывает кластеры дубликатов. Для первого прохода это лучше, чем автоматическое удаление: вы видите структуру дублей, оцениваете, где они лежат, и только после этого принимаете решение.
Поиск дублей среди файлов определённого типа
Одна из самых сильных сторон duff — работа со stdin. Если набор файлов предварительно фильтруется другой командой, duff спокойно принимает этот список и ищет повторяющиеся файлы уже внутри него. Классический пример — поиск одинаковых header-файлов через find.
find . -name '*.h' -type f | duff
Та же логика отлично работает для документов, изображений, логов, исходников, архивов и любых других типов файлов, если вам нужен не обзор всего дерева, а только конкретный слой данных. Это делает duff очень сильной консольной программой для поиска одинаковых файлов в специализированных наборах.
Безопасная работа с именами файлов
Когда в каталогах встречаются пробелы, не-ASCII-символы, переносы и прочая некрасота, нужно переходить на null-separated pipeline:
find . -name '*.h' -type f -print0 | duff -0 | xargs -0 -n1 echo
Здесь find передаёт пути с нулевыми разделителями, duff читает их в том же формате, а xargs -0 продолжает цепочку без потери структуры имён. Именно так и выглядит грамотная обработка файловых списков в Unix.
Получение списка только лишних копий
Если нужен именно список файлов-кандидатов на удаление, а не полный отчёт по группам, используется excess mode:
duff -re /путь/к/каталогу
Такой запуск удобен для чернового аудита. На экран попадают все дубликаты, кроме одной копии на группу. Это быстро, лаконично и отлично подходит для предварительного отчёта. Но этот режим не предназначен для умного выбора нужного экземпляра.
Полуавтоматическое удаление
Один из рабочих сценариев — удаление через duff -e0 * | xargs -0 rm. Это рабочая техника, но использовать её стоит только там, где совершенно неважно, какая копия в группе останется. Для реальных пользовательских данных разумнее сначала посмотреть результат через echo, записать его в файл, сверить группы вручную и только потом переходить к удалению.
В этом и состоит зрелая логика работы с duff: программа великолепно умеет готовить список лишних копий, но окончательное действие лучше оставлять под контролем человека, особенно если речь идёт о фотоархивах, юридических документах, рабочих проектах или резервных копиях с разной бизнес-ценностью.
Как duff ведёт себя в проблемных случаях
Имена с пробелами и нестандартными символами
Здесь duff ведёт себя правильно, если пользователь включает -0. Без null-safe режима даже хороший duplicate finder легко превращается в источник ошибок при массовой обработке. С -0 этого не происходит.
Пустые файлы
По умолчанию пустые файлы могут попадать в дубли, но параметр -z выключает их из такого сравнения. На практике это очень полезно: в служебных каталогах нулевые файлы встречаются часто, а ценности для поиска реальных дублей почти не дают.
Hard links
Если в файловой системе активно используются жёсткие ссылки, без -p можно получить отчёт, который выглядит убедительно, но на деле не отражает реальную избыточность данных. Physical mode как раз и нужен для того, чтобы multiple hard links на один physical file не считались duplicate files.
Символические ссылки
duff не следует за симлинками на файлы, а параметры обхода симлинков относятся к каталогам. Это создаёт довольно безопасную базу поведения и снижает шанс того, что программа внезапно начнёт анализировать лишние ветви файловой системы только потому, что где-то стоит ссылка.
Один и тот же файл передан в командной строке дважды
У duff есть известный крайний случай: если один и тот же файл указан на входе дважды и не используется -p, программа может показать его как дубликат самого себя. Это не проблема каталогов, а именно сценарий с повторным указанием файла в командной строке. В нормальной повседневной работе такое встречается редко, но при автоматической генерации списков путей этот нюанс важно помнить.
Автоматизация задач с duff
Один из главных аргументов в пользу duff — не только поиск дубликатов файлов в Linux, но и то, насколько хорошо она встраивается в shell. Если у вас уже есть find, xargs, sort, awk, cron или простой bash-скрипт, duff становится естественной частью пайплайна, а не отдельным закрытым приложением со своей логикой хранения проекта.
Типичный скриптовый паттерн выглядит так:
-
сначала другая команда формирует набор файлов;
-
затем duff находит кластеры дублей;
-
после этого результат либо пишется в отчёт, либо проходит ручную проверку, либо передаётся дальше на действие.
Именно поэтому duff особенно любят те, кому нужен duplicate finder для сервера, а не настольная утилита с превью. На сервере не нужен drag-and-drop, зато нужен строгий вывод, предсказуемые разделители и возможность подменить human-readable header на формат, удобный конкретному скрипту. Здесь -f, -0, -e, -q и stdin-режим складываются в очень цельный инструмент.
При этом автоматизация должна быть разумной. Как только сценарий переходит от собрать отчёт к удалить всё лишнее автоматически, duff требует дисциплины: предварительного dry-run, резервной копии и понимания того, что в excess mode сохранённая копия выбирается без пользовательского приоритета. Это не минус программы, а честное следствие её философии.
Сильные стороны duff
Предсказуемость
duff очень легко читать и очень сложно неправильно понять. Программа или показывает кластеры, или выводит список лишних копий, или читает входной поток путей. За счёт этого она воспринимается как честная Unix-утилита: ничего не прячет, не пытается угадать намерение пользователя и не подменяет контроль красивой автоматикой.
Удобство для скриптов
Поддержка stdin, null-separated режима, форматируемых заголовков и quiet mode делает duff отличным выбором для shell-автоматизации. Многие аналогичные программы либо больше заточены под ручной интерактивный просмотр, либо предлагают слишком агрессивные сценарии удаления, либо хуже вписываются в пайплайны. duff в этом отношении сбалансирован очень удачно.
Точная специализация
duff не пытается быть универсальным файловым комбайном. Она ищет duplicate files, даёт выбор digest-алгоритма, умеет thorough mode, не ломается на корректно подготовленном stdin и хорошо работает в рекурсивном обходе. За счёт такой узкой специализации программа производит впечатление инструмента, который создавали под реальную работу, а не под маркетинговый список функций.
Хороший баланс между ручным и автоматическим режимом
Обычный режим удобен для анализа человеком, excess mode — для дальнейшей машинной обработки. Такой дуализм сделан очень правильно. В одной и той же утилите есть и формат для спокойной ручной проверки, и формат для цепочек с xargs.
Ограничения и слабые места
Нет графического интерфейса
Если пользователь ищет программу, где можно открыть папку мышкой, отсортировать найденные копии по превью, отметить флажками нужные экземпляры и отправить всё лишнее в корзину, duff сразу мимо. Это консольная программа, и именно такой она задумана.
Нет предпросмотра содержимого
duff знает о файлах как о содержимом, размере, принадлежности к кластеру и пути в файловой системе. Но она не показывает миниатюры изображений, не проигрывает медиа, не открывает документы на просмотр и не помогает визуально сравнивать спорные файлы. Это нормально для CLI duplicate finder, но для некоторых категорий пользователей станет стоп-фактором.
Нет встроенной логики выбора лучшего оригинала
В excess mode duff оставляет одну копию, но не предлагает развитых правил вроде сохранять самый старый файл, сохранять файл из приоритетной директории, сохранять экземпляр с наибольшим числом hard links или сохранять копию из reference tree. Если такой интеллектуальный выбор критичен, лучше смотреть в сторону более специализированных альтернатив.
Требуется нормальное владение терминалом
duff не сложная, но она требует понимания shell-логики. Чтобы использовать её на максимум, нужно не бояться find, понимать разницу между newline-separated и null-separated списками, уметь осторожно строить пайплайны и не выполнять опасные команды автоматически без проверки. Для опытного Linux-пользователя это естественно, для новичка — уже порог входа.
Сравнение с аналогами
duff часто сравнивают с другими консольными утилитами поиска дублей, но по характеру она отличается довольно заметно. Ниже важнее не кто лучше вообще, а в каких задачах duff сильнее, а где удобнее взять другой инструмент.
| Программа | Ключевая идея | Где сильнее duff | Где слабее duff |
|---|---|---|---|
| fdupes | Классический CLI-инструмент поиска дублей, умеет рекурсию, работу с symlinks/hardlinks, фильтры по размеру, omit first | Проще модель вывода кластеров, удобный -0, форматирование header, ясный excess mode |
У fdupes больше встроенных режимов работы с размером, hidden-файлами и дополнительными действиями |
| rdfind | CLI-утилита, ориентированная на контентное сравнение, ranking оригинала и работу с бэкапами | duff понятнее и прямолинейнее в ежедневном ручном использовании | rdfind сильнее там, где важна система ранжирования оригинала и отдельный results-файл |
| czkawka | Многофункциональный инструмент: duplicate files, similar images, videos, music, empty files и т.д., есть GUI и CLI | duff легче, проще, точнее по назначению и удобнее как маленький Unix-инструмент | czkawka намного шире по возможностям, особенно если нужны похожие изображения, похожие видео и графический режим |
| rmlint | Продвинутый dedupe и борьба с другим файловым мусором, есть гибкое обращение с hardlinks и GUI Shredder | duff проще для быстрого старта и менее перегружен концепциями | rmlint мощнее в сложных сценариях дедупликации и последующих действий с файлами |
fdupes
fdupes — один из самых естественных конкурентов. Это тоже классическая CLI-программа для duplicate files, умеющая рекурсивный поиск, работу с symlinks, hardlinks, фильтрами размера, исключением нулевых файлов и режимом omit first.
Сильная сторона duff на этом фоне — более прозрачная подача результата как кластеров дубликатов с настраиваемым заголовком и хорошо продуманным -0/stdin-workflow. Если вам нужен инструмент, который комфортно читать глазами и при этом несложно встроить в пайплайн, duff нередко оказывается удобнее. Если же хочется более старой школы подхода с множеством давно привычных опций и дополнительных режимов, fdupes остаётся очень достойной альтернативой.
rdfind
rdfind особенно хорош там, где важна логика выбора оригинала. Программа прямо использует ranking: решает, какой файл считать original, а какой duplicate, и умеет работать с бэкапными деревьями в более формализованной манере. Кроме того, по умолчанию она создаёт results-файл и строит дальнейшую работу вокруг этого отчёта.
duff на этом фоне ощущается проще и строже. Здесь нет развёрнутой системы ранжирования: утилита не пытается навязать сложную стратегию выбора главного экземпляра. Именно поэтому для ежедневной ручной диагностики duff удобнее, а для сценариев, где критично понятие оригинала и нужна чёткая ranking-модель, интереснее выглядит rdfind.
czkawka
Сравнение с czkawka особенно показательно. Czkawka — это уже не просто duplicate file finder, а целая многофункциональная система: она ищет дубликаты по имени, размеру или hash, умеет similar images, similar videos, same music, empty files, temporary files, bad extensions и многое другое, причём доступна и в GUI, и в CLI.
Именно поэтому duff нельзя рассматривать как замену czkawka во всём. У duff другая сила: это маленькая, сфокусированная, предсказуемая утилита для точного поиска одинаковых файлов по содержимому в терминале. Если нужны визуальные сценарии, поиск похожих картинок, музыка по тегам и общая уборка файлового мусора, czkawka объективно богаче. Но если задача узкая, shell-ориентированная и серверная, duff часто выигрывает за счёт чистоты и простоты.
rmlint
rmlint — это уже тяжёлый инструмент для продвинутой дедупликации и поиска другого space waste. Он умеет очень гибко работать с hardlinked-файлами, поддерживает разные режимы трактовки symlinks и имеет собственную GUI-оболочку Shredder. По масштабу возможностей это мощнее и шире, чем duff.
Но вместе с мощью растёт и сложность. duff проще понять, проще внедрить в существующий shell-workflow и проще оставить под полным контролем пользователя. Для многих задач это преимущество. Если же инфраструктура сложная, нужны изощрённые правила дедупликации и более насыщенная экосистема действий после анализа, тогда rmlint будет сильнее.
Кому duff подойдёт лучше всего
duff — очень удачный выбор для нескольких категорий пользователей.
Linux power users
Если терминал — рабочая среда, а не вынужденная необходимость, duff почти наверняка понравится. Утилита минималистична, предсказуема, хорошо стыкуется с find и xargs, не требует графики и не навязывает лишних концепций.
Системные администраторы
На серверах и headless-машинах duff раскрывается особенно хорошо. Там duplicate finder с GUI не нужен, а вот короткая команда, которую можно встроить в проверку, отчёт или регламентную чистку, — очень к месту.
Разработчики
В кодовых базах, архивах исходников, наборах экспортов, старых ветках, документации и бэкапах проектов дубли появляются постоянно. duff удобна тем, что может работать не только по каталогу целиком, но и по заранее отфильтрованному множеству файлов: например, только .h, только .c, только .md, только конкретный поднабор из find.
Те, кто хочет сначала анализ, а потом действие
duff очень хороша, когда цель — сначала увидеть картину, а потом принимать решение. В этом смысле normal mode — одна из лучших сторон программы. Она не превращает поиск дублей в слишком агрессивную автоматику и тем самым помогает не ошибиться.
Кому лучше выбрать другую программу
Если нужен графический duplicate finder с панелями, превью и сортировками мышкой, duff не подойдёт. Для таких задач рациональнее смотреть в сторону czkawka GUI или других визуальных решений.
Если нужен поиск похожих, а не строго одинаковых изображений, duff тоже не лучший выбор. Она ищет exact duplicates по содержимому, а не визуально похожие кадры разных размеров, не снимки с водяными знаками и не схожие версии картинок после лёгкой обработки. Здесь нужны инструменты класса czkawka с режимом similar images.
Если критично автоматически выбирать лучший оригинал по внятным правилам, интереснее выглядит rdfind со своей системой ranking. А если нужна продвинутая дедупликация с большим числом сценариев постобработки, то уже стоит смотреть на rmlint.
Итоговый вердикт
duff — это очень удачная утилита поиска дубликатов файлов для тех, кто ценит точность, прозрачность и shell-совместимость. Она не обещает лишнего, не маскирует консольную природу под псевдо-GUI и не превращает поиск дублей в непредсказуемую магию. Вместо этого duff даёт хорошо продуманную модель: normal mode для чтения человеком, excess mode для практической обработки, -0 для безопасных имён, -t для максимальной аккуратности, -f для кастомного заголовка и -p для корректной работы с hard links.
Как консольная программа для поиска одинаковых файлов, duff ощущается зрелым инструментом старой Unix-школы. Она особенно хороша в Linux-среде, на серверах, в скриптах, в инженерных каталогах и в любых ситуациях, где важнее управляемость, чем красивый интерфейс. Не всем подойдёт именно такой подход, но в своём классе duff остаётся очень сильным выбором.
Если оценивать программу как практический duplicate file finder, итог получается довольно ясный: duff стоит выбирать тогда, когда нужен надёжный терминальный инструмент для поиска точных дубликатов и дальнейшей автоматизации через shell. А если нужен визуальный контроль, предпросмотр, похожие изображения и широкий набор смежных режимов, лучше сразу брать более тяжёлый аналог.