Об этом проекте
findDupes — утилита командной строки, написанная на Go, которая находит дубликаты файлов по хэшу содержимого, а не по имени, поэтому копии с разными именами также обнаруживаются. Она сканирует одну или несколько директорий и выполняет хэширование параллельно.
Сканирование выполняется поэтапно, чтобы избежать полного чтения каждого файла. Сначала рекурсивно обходятся указанные корневые директории и собираются пути и размеры всех обычных файлов; файлы с уникальным размером отбрасываются, так как они не могут иметь идентичную копию. Оставшиеся кандидаты хэшируются по первым 4 КиБ через пул воркеров, и только файлы с совпадающим префиксным хэшем читаются повторно и хэшируются полностью с помощью SHA-256. Файлы с одинаковым полным хэшем считаются дубликатами. Проверки размера и префикса служат исключительно фильтрами, поэтому файлы с разными размерами или префиксными хэшами никогда не хэшируются полностью друг относительно друга.
Обработка корневых директорий выполнена тщательно. Корни преобразуются в абсолютные пути с разрешёнными симлинками перед сканированием; повторяющиеся или перекрывающиеся корни (например, одна и та же директория, указанная дважды, или директория и её поддиректория) исключаются, включая разные написания или пути, ведущие через один и тот же симлинк. Симлинки внутри сканируемой директории не следуются, собираются только обычные файлы, а несколько путей к одному и тому же hard-linked файлу собираются один раз. Файл, который невозможно прочитать при хэшировании, логируется и пропускается; если корневую директорию нельзя разрешить или обойти, файлы, найденные в других корнях, всё равно обрабатываются, но команда возвращает ошибку после вывода результатов. Ctrl-C и SIGTERM отменяют активное сканирование, при этом работа останавливается между чтениями файловой системы.
Группы дубликатов выводятся с хэшем SHA-256, размером файла и путями; пути внутри каждой группы и сами группы сортируются для воспроизводимого вывода. Флаги: -v/--verbose для отображения прогресса при сканировании, -w/--workers для количества параллельных воркеров хэширования (по умолчанию: число CPU), --json для вывода в виде newline-delimited JSON-объектов с полями hash, size и paths, --stats для статистики сканирования в stderr и --version. Статистика охватывает обнаруженные файлы, файлы после фильтрации по размеру, кандидаты по хэшу содержимого, группы дубликатов и файлы-дубликаты; вывод статистики в stderr позволяет безопасно передавать JSON-вывод в такие инструменты, как jq.
Установка требует Go 1.25 или новее и выполняется командой go install github.com/mojotx/findDupes@latest, либо клонированием репозитория и запуском go install -v ./.... В репозитории есть CI и CodeQL workflow, а тестовая матрица запускает набор тестов с race detector на Linux, macOS и Windows с использованием версии Go, указанной в go.mod.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.