← На главную

dskDitto находит дубликаты через SHA-256 и BLAKE3 и заменяет симлинками

22.07.2026 06:52 · hackernews

Появился детектор дубликатов dskDitto — консольная утилита на Go, которая находит одинаковые файлы, показывает результаты в интерактивном терминальном интерфейсе на Bubble Tea и умеет аккуратно удалять лишнее или заменять его символическими ссылками. Есть и экспериментальный графический режим на Raylib, но по умолчанию сборка идёт только с TUI.

Сканирование работает в несколько потоков, за счёт чего большие диски обрабатываются быстро. По умолчанию хеш считается через SHA-256 — он консервативен и даёт сильные гарантии от коллизий. Можно переключиться на BLAKE3, который на современных CPU часто обгоняет SHA-256, но разработчик предупреждает: на macOS тонко настроенный SHA-256 всё ещё выигрывает, поэтому дефолт пока не меняли.

dskDitto понимает жёсткие ссылки: если на один файл ведёт несколько путей, он не считает их настоящими дубликатами и не предлагает удалить. Интерфейс по умолчанию интерактивный — вы просматриваете группы дубликатов, подтверждаете удаление или превращение копий в симлинки. Чтобы убрать подтверждение, есть ключ --no-confirm, но без него каждое массовое изменение требует ввода кода. Через TUI можно пометить нужные файлы и нажать L, чтобы заменить отмеченные симлинками на оставшийся неотмеченный файл.

Утилита умеет искать дубликаты конкретного файла: даёшь путь через --file, она хеширует его и находит все совпадающие по содержимому, при этом вывод ограничивается этой единственной группой. Есть неглубокий режим сравнения только по имени файла — --name-only. А опция --fuzzy ищет файлы с похожим содержимым; порог схожести регулируется ключом --fuzzy-threshold, по умолчанию 75%. В нечётком режиме автоматическое удаление и создание ссылок заблокированы.

Фильтры гибкие: можно отсечь файлы по минимальному и максимальному размеру, исключать скрытые, симлинки, виртуальные файловые системы, ограничивать глубину или оставаться в пределах одного устройства с помощью --one-file-system. Повторяемый --exclude прячет любые подкаталоги.

Результаты можно выгрузить в CSV, JSON или простой текст для скриптов. Прямой вывод в терминал (без TUI) включается через --text или --bullet.

Ставится прямо из исходников: go install github.com/jdefrancesco/dskDitto/cmd/dskDitto@latest, нужен Go 1.22+. Если нужен Raylib-интерфейс, сначала ставят зависимости и собирают с тегом gui. В репозитории есть Makefile, который соберёт бинарник в bin/dskDitto и положит его в /usr/local/bin или в выбранный PREFIX. Для профилирования можно записать CPU-профиль через --profile или поднять pprof-эндпоинт.

Проект под лицензией Apache, принимает пул-реквесты, развивается в свободное время.

Читать оригинал →