Skip to content
m0lly4freePublic

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

# 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