Jaka jest najlepsza metoda usuwania zduplikowanych plików obrazów z komputera?


13

Mam wiele duplikatów plików obrazów na moim komputerze z systemem Windows, w różnych podfolderach i z różnymi nazwami plików.

Jaki skrypt Pythona lub darmowy program zaleca się do usuwania duplikatów?

(Przeczytałem to podobne pytanie, ale na plakacie pyta się o wizualne duplikaty o różnych rozmiarach plików. Moje są dokładnymi duplikatami o różnych nazwach plików.)


2
Pamiętaj, że nawet jeśli wszystkie piksele są takie same, nadal mogą mieć różne informacje EXIF ​​(zmodyfikowane przez programy, które obsługiwały obrazy na pewnym etapie), co spowoduje problemy z większością obecnie proponowanych rozwiązań.
user12889

Odpowiedzi:


17

Nie polegaj na sumach MD5.

Sumy MD5 nie są niezawodnym sposobem sprawdzania duplikatów, są jedynie sposobem sprawdzenia różnic.

Użyj MD5 do znalezienia możliwy kandydat duplikaty, a następnie dla każdej pary współdzielącej MD5

  1. Otwiera oba pliki
  2. Szuka do przodu w tych plikach, dopóki się nie różni.

Widząc, że jestem podchwycony przez ludzi, którzy naiwnie podchodzą do składania duplikatów Tożsamości, Jeśli chcesz polegać całkowicie na algorytmie mieszania, na litość boską, używaj czegoś trudniejszego, jak SHA256 lub SHA512, przynajmniej zmniejszysz prawdopodobieństwo do rozsądnego stopnia, sprawdzając więcej bitów. MD5 jest wyjątkowo słaba dla warunków kolizji.

Radzę również, aby ludzie czytali tutaj listy dyskusyjne zatytułowane „sprawdzanie plików”: http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Jeśli powiesz „MD5 może jednoznacznie zidentyfikować wszystkie pliki jednoznacznie”, to masz błąd logiczny.

Biorąc pod uwagę zakres wartości o różnej długości od 40 000 bajtów długości do 100 000 000 000 bajtów długości, całkowita liczba kombinacji dostępnych dla tego zakresu bardzo przekracza możliwą liczbę wartości reprezentowanych przez MD5, ważącą zaledwie 128 bitów długości.

Reprezentują 2 ^ 100 000 000 000 kombinacji z tylko 2 ^ 128 kombinacjami? Nie wydaje mi się to prawdopodobne.

Najmniej naiwny sposób

Najmniej naiwny sposób i najszybszy sposób wyeliminowania duplikatów jest następujący.

  1. Według rozmiaru : Pliki o innym rozmiarze nie mogą być identyczne. Zajmuje to niewiele czasu, ponieważ nie musi nawet otwierać pliku.
  2. Według MD5 : Pliki o różnych wartościach MD5 / Sha nie mogą być identyczne. Trwa to trochę dłużej, ponieważ musi odczytać wszystkie bajty w pliku i wykonać na nich matematykę, ale szybciej dokonuje wielokrotnych porównań.
  3. Brak powyższych różnic : Wykonaj porównanie plików bajt po bajcie. Jest to powolny test do wykonania, dlatego pozostaje do momentu, aż wszystkie inne czynniki eliminujące zostaną uwzględnione.

Fdupes robi to. Powinieneś używać oprogramowania, które używa tych samych kryteriów.


7
Dosłownie bardziej prawdopodobne jest, że twój dysk twardy w magiczny sposób zniszczy obraz, niż w przypadku MD5. „Reprezentuje 2 ^ 100 000 000 000 kombinacji z tylko 2 ^ 128 kombinacjami” - zgadzam się z tobą tutaj. Gdyby miał 2 ^ 100 000 000 000 zdjęć, MD5 (lub prawie każdy algorytm skrótu) byłby zły.
Greg Dean

4
jest Nie gwarancja, jej sprawiedliwość mało prawdopodobne . Jego nie niemożliwy. Jest całkiem możliwe, że 10 plików koliduje ze sobą, ale wszystkie są zupełnie inne. Jest to mało prawdopodobne, ale może się zdarzyć, więc musisz to sprawdzić.
Kent Fredric

2
rozmiar pliku, a następnie MD5 i dopiero potem bajt do sprawdzania bajtów.
Brad Gilbert

3
@Kent - 100% agresji z tobą. To lenistwo lekceważenie czegoś, ponieważ jest bardzo mało prawdopodobne, nawet tak mało prawdopodobne, jak mówimy. Byłbym zirytowany, gdyby niektóre moje dane zostały zniszczone, ponieważ osoba, która napisała program, myślała, że ​​coś jest zbyt mało prawdopodobne, by przeszkadzało w kodowaniu.
Joe Taylor

10

Jest to jeden liner na systemach uniksowych, takich jak systemy Linux lub Windows z zainstalowanym Cygwinem:

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

md5sum (który jest o około 50% szybszy) może zostać użyty, jeśli wiesz, że nie ma celowo utworzonych kolizji (masz większą szansę na wygranie 10 dużych loterii niż szansa na znalezienie jednej naturalnie występującej kolizji md5)

Jeśli chcesz zobaczyć wszystkie dupsy, które masz zamiast ich usunąć, zmień unlink $file część do print $file, "\n".


1
Możesz także użyć -print0 i xargs-0, aby złapać spacje, ale find ma także użyteczną opcję -exec: find. -type f -exec shasum {} | sort ... Także: Nie powinieneś używać @F (-a), ponieważ nie będzie działać ze spacjami. Spróbuj zamiast tego substr.

Dobra rozmowa, geocar. Zaktualizowałem odpowiedź swoimi sugestiami.

„md5sum (który jest o około 50% szybszy) może być użyty, jeśli wiesz, że nie ma celowo utworzonych kolizji”
Greg Dean

6

Użyłem fdupes (napisane w C) i freedups (Perl) na systemach uniksowych i mogą działać również w systemie Windows; istnieje również podobne które mają działać w systemie Windows: dupmerge, liten (napisane w Pythonie) itp.


Oprogramowanie Perla i Pythona powinno działać identycznie w systemach Windows i * nix, zakładając, że szczegóły systemu plików nie mają znaczenia.
CarlF

2

Aby usunąć duplikaty obrazów w systemie Windows, spójrz na DupliFinder. Może porównywać obrazy według różnych kryteriów, takich jak nazwa, rozmiar i rzeczywiste informacje o obrazie.

Aby uzyskać inne narzędzia do usuwania duplikatów plików, spójrz na ten Lifehacker artykuł.


1

Zamiast DupliFindera spróbuj zamiast tego rozwidlić projekt, Sobowtór . Naprawiliśmy mnóstwo błędów w oryginalnym projekcie, dodaliśmy szereg nowych funkcji i znacznie poprawiliśmy wydajność.


1

Jedną z opcji może być Dupkiller .

DupKiller to jedno z najszybszych i najpotężniejszych narzędzi do wyszukiwania i usuwania duplikatów lub podobnych plików na komputerze. Skomplikowane algorytmy, wbudowane w mechanizm wyszukiwania, zapewniają wysokie wyniki - szybkie wyszukiwanie plików. Wiele opcji pozwala na elastyczne dostosowanie wyszukiwania.

enter image description here

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.