# DupClean (RU)
DupClean - утилита для поиска дубликатов файлов в выбранной папке
и перемещения их в карантин для безопасной проверки и удаления.
Программа ничего не удаляет сама: дубликаты переезжают в папку
`duplicates/` с сохранением структуры, где их можно спокойно
просмотреть и удалить вручную.
## Как это работает
Поиск идёт по двухступенчатой воронке:
1. **По размеру.** Файлы с уникальным размером не могут иметь
дубликатов и отсеиваются сразу, без чтения.
2. **По содержимому (MD5-хэш).** Файлы с совпавшим размером
читаются кусками по 1 МБ и получают «отпечаток». Дубликаты -
только файлы с одинаковым отпечатком.
Благодаря воронке программа не сравнивает каждый файл с каждым
и быстро работает даже на больших папках.
## Возможности
- поиск дубликатов по размеру и хэшу содержимого;
- выбор папки для сканирования через диалог;
- режим репетиции `DRY_RUN`: показывает план, не трогая файлы;
- карантин вместо удаления, с сохранением относительных путей;
- карантин игнорируется при повторных запусках;
- счётчик перемещённых файлов и путь к карантину.
## Безопасность
- никогда не удаляет файлы — только перемещает;
- в каждой группе дубликатов один файл остаётся на месте;
- режим `DRY_RUN` для проверки плана до реального запуска;
- файлы в карантине не участвуют в следующих сканированиях.
## Требования
- Python 3.9+;
- только стандартная библиотека: `pathlib`, `hashlib`, `tkinter`, `sys`.
## Запуск
```bash
py main.py
-------------------------------------------------------------------------
# DupClean (EN)
DupClean is a utility for finding duplicate files in a selected folder
and moving them to quarantine for safe scanning and deletion.
The program doesn't delete anything itself: duplicates are moved to the `duplicates/` folder, preserving their structure, where they can be safely
viewed and deleted manually.
## How it works
The search is performed using a two-stage funnel:
1. **By size.** Files with a unique size cannot have duplicates and are filtered out immediately, without being read.
2. **By content (MD5 hash).** Files with a matching size
are read in 1 MB chunks and receive a "fingerprint." Duplicates are
only files with the same fingerprint.
Thanks to the funnel, the program doesn't compare every file with every other
and works quickly even on large folders.
## Features
- search for duplicates by size and content hash;
- Select a folder to scan via a dialog;
- DRY_RUN rehearsal mode: shows the plan without touching files;
- Quarantine instead of deleting, preserving relative paths;
- Quarantine is ignored on subsequent runs;
- Count of moved files and the path to the quarantine.
## Security
- Never deletes files, only moves them;
- One file in each duplicate group remains in place;
- DRY_RUN mode for testing the plan before the actual run;
- Quarantined files are not included in subsequent scans.
## Requirements
- Python 3.9+;
- Only the standard library: pathlib, hashlib, tkinter, sys.
## Launch
```bash
py main.py