Rozdział 23 · Część IV · Wdrażamy SafeSort
Znajdź identyczne pliki
Kosztowne haszowanie treści odbywa się tylko wtedy, gdy faktycznie może zmienić odpowiedź – po zaznaczeniu według rozmiaru.
SafeSort · Część 4 z 6Wdrożenie
Add duplicate detection
Area: DuplicatesPriority: Medium
git switch -c feat/duplicate-detection
Drugim głównym elementem SafeSort jest wyszukiwanie plików o tej samej treści. Zadanie Wygląda to prosto: jeśli dwa pliki mają te same bajty, są duplikatami. Naiwne rozwiązanie jest Porównaj zawartość każdego pliku z zawartością każdego innego pliku – działa, ale dla tysięcy pliki oznaczają czytanie każdego pliku w kółko.
| Rozmiar | Pliki |
|---|---|
| 100 KB | a.jpg, b.jpg |
| 240 KB | report.pdf (jeden plik nie prowadzi dalej) |
| 3 MB | video.mp4, video-copy.mp4 |
Sprawdzane są tylko grupy dwóch lub więcej plików — pojedynczy rozmiar jednocześnie jest odrzucana, nie ma czego powielać.
Plik o unikalnym rozmiarze nie może być duplikatem
Jeśli rozmiar pliku nie zgadza się z żadnym innym plikiem w przeskanowanym katalogu, na pewno nie ma duplikatu — i nie trzeba liczyć jego hasha. To sprawdzenie jest prawie darmowe (rozmiar jest już znany z
FileInfo), i zapisuje dokładnie to, co jest najdroższe — czytanie i haszowanie zawartości plików.Następnie jest sama funkcja skrótu, a następnie to, jak haszowanie wychodzi są grupowane w gotowe grupy duplikatów i przekazują ostatnie, bajtowe potwierdzenie.
Krótko
- Poszukiwanie duplikatów przebiega w czterech etapach: według rozmiaru, według skrótu, według pary (rozmiar, skrót), a następnie potwierdzenia bajtów.
- Skrót jest obliczany tylko dla plików, które już mają co najmniej jeden plik o tym samym rozmiarze.
- duplicates() to read-only komenda: raportuje tylko znalezione grupy, bez usuwania czegokolwiek.