Qual è il metodo migliore per rimuovere i file di immagine duplicati dal tuo computer?


14

Ho molti file di immagini duplicati sul mio computer Windows, in diverse sottocartelle e con nomi di file diversi.

Quale programma Python o programma gratuito consiglieresti di rimuovere i duplicati?

(Ho letto questa domanda simile, ma il poster lì sta chiedendo dei duplicati visivi con dimensioni dei file diverse. I miei sono duplicati esatti con nomi di file diversi.)


2
Tieni presente che anche se tutti i pixel sono uguali, potrebbero avere comunque informazioni EXIF ​​diverse (modificate da programmi che hanno gestito le immagini in una certa fase) che potrebbero creare problemi con la maggior parte delle soluzioni attualmente proposte.
user12889

Risposte:


17

Non fare affidamento sulle somme MD5.

Le somme MD5 non sono un modo affidabile per verificare la presenza di duplicati, ma solo un modo per verificare le differenze.

Usa gli MD5 per trovare possibili duplicati candidati , quindi per ogni coppia che condivide un MD5

  1. Apre entrambi i file
  2. Cerca avanti in quei file fino a quando uno differisce.

Vedendo che sto venendo retrocesso da persone che adottano approcci ingenui per archiviare l'identità duplicata, se hai intenzione di fare affidamento interamente su un algoritmo di hash, per l'amor del cielo, usa qualcosa di più duro come SHA256 o SHA512, almeno ridurrai la probabilità di un grado ragionevole facendo controllare più bit. MD5 è estremamente debole per le condizioni di collisione.

Consiglio anche alle persone di leggere le mailing list qui intitolate 'controllo file': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Se si dice "MD5 può identificare in modo univoco tutti i file in modo univoco", si verifica un errore logico.

Dato un intervallo di valori, di lunghezze variabili da 40.000 byte di lunghezza a 100.000.000.000 di byte di lunghezza, il numero totale di combinazioni disponibili per quell'intervallo supera di gran lunga il possibile numero di valori rappresentati da MD5, con un peso di soli 128 bit di lunghezza.

Rappresenta 2 ^ 100.000.000.000 di combinazioni con solo 2 ^ 128 combinazioni? Non penso che sia probabile.

Il modo meno ingenuo

Il modo meno ingenuo e il più veloce per eliminare i duplicati è il seguente.

  1. Per dimensione : i file con dimensioni diverse non possono essere identici. Questo richiede poco tempo in quanto non deve nemmeno aprire il file.
  2. Con MD5 : i file con valori MD5 / Sha diversi non possono essere identici. Questo richiede un po 'più tempo perché deve leggere tutti i byte nel file ed eseguire la matematica su di essi, ma rende più rapidi i confronti multipli.
  3. In mancanza delle differenze di cui sopra : eseguire un confronto byte per byte dei file. Questo è un test lento da eseguire, motivo per cui viene lasciato fino a quando tutti gli altri fattori di eliminazione sono stati considerati.

Fdupes fa questo. E dovresti usare un software che utilizza gli stessi criteri.


7
È letteralmente più probabile che il tuo disco rigido distrugga magicamente un'immagine, che MD5 si scontrerà. "Rappresenta 2 ^ 100.000.000.000 di combinazioni con solo 2 ^ 128 combinazioni" - Sono d'accordo con te qui. Se avesse 2 ^ 100.000.000.000 di immagini, MD5 (o quasi qualsiasi algoritmo di hash) sarebbe male.
Greg Dean,

4
non c'è garanzia, è semplicemente improbabile . La sua non è impossibile. È del tutto possibile avere 10 file che si scontrano tra loro, ma sono tutti completamente diversi. Questo è improbabile, ma può succedere, quindi devi provarlo.
Kent Fredric,

2
dimensione del file, quindi MD5 e solo quindi byte per controllo byte.
Brad Gilbert,

3
@Kent - Sono d'accordo al 100% con te. È pigrizia ignorare qualcosa perché è molto improbabile, anche se improbabile di cui stiamo parlando. Sarei infastidito se alcuni dei miei dati fossero distrutti solo perché la persona che ha scritto il programma pensava che qualcosa era troppo improbabile per cui preoccuparsi di scrivere codice.
Joe Taylor,

10

È una linea su sistemi operativi unix come (incluso Linux) o Windows con Cygwin installato:

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 (che è circa il 50% più veloce) può essere usato se sai che non ci sono collisioni deliberatamente create (avresti maggiori possibilità di vincere 10 lotterie principali rispetto alla possibilità di trovare una collisione md5 che si verifica naturalmente.)

Se vuoi vedere tutti i duplicati che hai invece di rimuoverli basta cambiare la unlink $fileparte in print $file, "\n".


1
Puoi usare -print0 e xargs-0 anche per catturare spazi, ma find ha anche un'opzione -exec che è utile qui: find. -type f -exec shasum {} \; | ordina ... Inoltre: non dovresti usare @F (-a) perché non funzionerà con gli spazi. Prova invece substr.

Buona chiamata, geocar. Aggiornato la risposta con i tuoi suggerimenti.

"md5sum (che è circa il 50% più veloce) può essere usato se sai che non ci sono collisioni deliberatamente create" - esattamente
Greg Dean

6

Ho usato fdupes(scritto in C) e freedups(Perl) su sistemi Unix, e potrebbero funzionare anche su Windows; ci sono anche altri simili che hanno lo scopo di lavorare su Windows: dupmerge, liten(scritto in Python), etc.


I software Perl e Python dovrebbero funzionare in modo identico su sistemi Windows e * nix, supponendo che i dettagli del filesystem non contino.
CarlF,

2

Per rimuovere immagini duplicate su Windows, dai un'occhiata a DupliFinder. Può confrontare le immagini in base a una varietà di criteri quali nome, dimensioni e informazioni sull'immagine effettiva.

Per altri strumenti per rimuovere i file duplicati dai un'occhiata a questo articolo di Lifehacker .


1

Invece di DupliFinder, prova invece il progetto a forcella, DeadRinger . Abbiamo risolto un sacco di bug nel progetto originale, aggiunto un sacco di nuove funzionalità e prestazioni notevolmente migliorate.


1

Un'opzione può essere Dupkiller .

DupKiller è uno degli strumenti più veloci e potenti per cercare e rimuovere file duplicati o simili sul tuo computer. Gli algoritmi complicati, integrati nel meccanismo di ricerca, offrono risultati elevati: la ricerca rapida dei file. Molte opzioni consentono di personalizzare in modo flessibile la ricerca.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.