CLI-утилита на Rust для поиска дубликатов файлов с полностью параллельным хешированием, двухэтапной проверкой совпадений и возможностью удалить их или переместить в отдельную папку.
git clone https://github.com/EnderMur/duplicate-finder.git
cd duplicate-finderУбедитесь, что у вас установлен Rust и Cargo.
cargo build --releaseГотовый бинарный файл будет находиться в:
target/release/duplicate-finderПуть к директории, в которой нужно искать дубликаты.
- Если аргумент передан, программа сразу начинает сканирование этой папки.
- Если аргумент не передан, программа попросит ввести путь вручную после запуска.
Пример:
cargo run -- --path "C:/Users/User/Documents"Папка, в которую будут перемещаться дубликаты, если в меню выбрать перенос вместо удаления.
- Если аргумент передан, дубликаты будут перемещаться именно в эту директорию.
- Если аргумент не передан, используется папка
.duplicatesвнутри сканируемой директории. - Аргумент не включает перенос автоматически: после поиска программа всё равно спросит, что делать с найденными дубликатами.
Пример:
cargo run -- --path "C:/Users/User/Documents" --move-to "D:/Temp/duplicates"Количество потоков для параллельного хеширования.
- По умолчанию используется число доступных логических ядер.
- Параметр влияет на быстрый хеш первых
128 KiBи на полныйSHA-256. - Если одновременно задан
--memory-limit, итоговое число рабочих потоков может быть автоматически уменьшено.
Пример:
cargo run -- --path "C:/Users/User/Documents" --threads 8Лимит памяти для этапа хеширования.
- Поддерживаются значения вида
256MB,1GB,131072KB. - По умолчанию используется
256MB. - Лимит ограничивает количество параллельных воркеров хеширования, чтобы не раздувать буферы чтения при обработке больших наборов файлов.
Пример:
cargo run -- --path "C:/Users/User/Documents" --memory-limit 512MBПоказывает краткую справку по аргументам и примерам запуска.
Пример:
cargo run -- --helpПоказывает версию программы.
Пример:
cargo run -- --versioncargo run -- --path "C:/Users/User/Documents"или
./duplicate-finder --path "/home/user/files"По умолчанию при выборе перемещения дубликаты попадут в папку .duplicates внутри указанного пути.
cargo run -- --path "C:/Users/User/Documents"Если нужна своя папка назначения:
cargo run -- --path "C:/Users/User/Documents" --move-to "D:/Temp/duplicates"cargo runПосле запуска программа попросит вручную ввести путь.
Во время работы показывается прогресс для сканирования, быстрого хеша и полного SHA-256.
Поиск дубликатов выполняется в три этапа:
- Сначала файлы группируются по размеру.
- Для файлов одинакового размера параллельно считается быстрый хеш первых
128 KiB. - Полный
SHA-256считается только для файлов, совпавших и по размеру, и по быстрому хешу.
Это уменьшает количество полных чтений диска и ускоряет обработку больших каталогов.
Программа сохраняет кэш в файл .duplicate-cache рядом с исполняемым файлом.
- В кэше хранятся размер файла, время изменения, быстрый хеш и полный хеш.
- Если файл не менялся, утилита использует кэш и не пересчитывает хеш повторно.
- Если в текущем сканировании файл остался один, но его полный хеш совпал с записью другого файла из кэша, такой файл автоматически удаляется как дубликат.
- Кэш автоматически обновляется после завершения поиска.
cargo run -- --path "C:/Users/User/Documents" --threads 8 --memory-limit 512MBcargo run -- --path "C:/Users/User/Documents" --move-to "D:/Temp/duplicates" --threads 4После того как программа найдёт дубликаты, она покажет интерактивное меню:
0- ничего не делать и выйтиd- удалить все файлы во всех найденных группахm- переместить дубликаты во всех группах, оставив первый файл1- оставить первый файл в каждой группе и удалить остальныеi- пройти по группам по одной и выбрать действие отдельно
Pull Request'ы приветствуются.
Если вы хотите добавить новые функции или исправить ошибки:
- Сделайте Fork репозитория
- Создайте новую ветку
- Внесите изменения
- Откройте Pull Request
Проект распространяется под лицензией MIT.