Skip to content

EnderMur/duplicate-finder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

duplicate-finder

CLI-утилита на Rust для поиска дубликатов файлов с полностью параллельным хешированием, двухэтапной проверкой совпадений и возможностью удалить их или переместить в отдельную папку.


Установка

Клонирование репозитория

git clone https://github.com/EnderMur/duplicate-finder.git
cd duplicate-finder

Сборка проекта

Убедитесь, что у вас установлен Rust и Cargo.

cargo build --release

Готовый бинарный файл будет находиться в:

target/release/duplicate-finder

Использование

Аргументы

-p, --path <DIR>

Путь к директории, в которой нужно искать дубликаты.

  • Если аргумент передан, программа сразу начинает сканирование этой папки.
  • Если аргумент не передан, программа попросит ввести путь вручную после запуска.

Пример:

cargo run -- --path "C:/Users/User/Documents"

--move-to <DIR>

Папка, в которую будут перемещаться дубликаты, если в меню выбрать перенос вместо удаления.

  • Если аргумент передан, дубликаты будут перемещаться именно в эту директорию.
  • Если аргумент не передан, используется папка .duplicates внутри сканируемой директории.
  • Аргумент не включает перенос автоматически: после поиска программа всё равно спросит, что делать с найденными дубликатами.

Пример:

cargo run -- --path "C:/Users/User/Documents" --move-to "D:/Temp/duplicates"

--threads <N>

Количество потоков для параллельного хеширования.

  • По умолчанию используется число доступных логических ядер.
  • Параметр влияет на быстрый хеш первых 128 KiB и на полный SHA-256.
  • Если одновременно задан --memory-limit, итоговое число рабочих потоков может быть автоматически уменьшено.

Пример:

cargo run -- --path "C:/Users/User/Documents" --threads 8

--memory-limit <SIZE>

Лимит памяти для этапа хеширования.

  • Поддерживаются значения вида 256MB, 1GB, 131072KB.
  • По умолчанию используется 256MB.
  • Лимит ограничивает количество параллельных воркеров хеширования, чтобы не раздувать буферы чтения при обработке больших наборов файлов.

Пример:

cargo run -- --path "C:/Users/User/Documents" --memory-limit 512MB

-h, --help

Показывает краткую справку по аргументам и примерам запуска.

Пример:

cargo run -- --help

-V, --version

Показывает версию программы.

Пример:

cargo run -- --version

Запуск с указанием пути

cargo 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.

Как работает поиск

Поиск дубликатов выполняется в три этапа:

  1. Сначала файлы группируются по размеру.
  2. Для файлов одинакового размера параллельно считается быстрый хеш первых 128 KiB.
  3. Полный SHA-256 считается только для файлов, совпавших и по размеру, и по быстрому хешу.

Это уменьшает количество полных чтений диска и ускоряет обработку больших каталогов.

Кэш хешей

Программа сохраняет кэш в файл .duplicate-cache рядом с исполняемым файлом.

  • В кэше хранятся размер файла, время изменения, быстрый хеш и полный хеш.
  • Если файл не менялся, утилита использует кэш и не пересчитывает хеш повторно.
  • Если в текущем сканировании файл остался один, но его полный хеш совпал с записью другого файла из кэша, такой файл автоматически удаляется как дубликат.
  • Кэш автоматически обновляется после завершения поиска.

Примеры

cargo run -- --path "C:/Users/User/Documents" --threads 8 --memory-limit 512MB
cargo run -- --path "C:/Users/User/Documents" --move-to "D:/Temp/duplicates" --threads 4

Что происходит после поиска

После того как программа найдёт дубликаты, она покажет интерактивное меню:

  • 0 - ничего не делать и выйти
  • d - удалить все файлы во всех найденных группах
  • m - переместить дубликаты во всех группах, оставив первый файл
  • 1 - оставить первый файл в каждой группе и удалить остальные
  • i - пройти по группам по одной и выбрать действие отдельно

Contributing

Pull Request'ы приветствуются.

Если вы хотите добавить новые функции или исправить ошибки:

  1. Сделайте Fork репозитория
  2. Создайте новую ветку
  3. Внесите изменения
  4. Откройте Pull Request

Licence

Проект распространяется под лицензией MIT.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages