Come verificare la presenza di file duplicati?


4

Ho un disco rigido esterno sul quale ho eseguito il backup dei file più volte. Alcuni file sono stati modificati tra backup, altri no. Alcuni potrebbero essere stati rinominati. Ora sto esaurendo lo spazio e mi piacerebbe ripulire i file duplicati.

La mia idea era di md5sum ogni file sul disco, quindi cercare i duplicati e diff i file rilevanti (nel caso, haha). È questo il modo migliore per farlo? Quali sono alcuni altri metodi di verifica dei file duplicati?


Vuoi scrivere un programma per farlo o usare gli strumenti esistenti?
Michael Petrotta

1
Ho già violato questo insieme alla riga di comando usando la strategia descritta, e funziona. Mi stavo semplicemente chiedendo se esistono altre strategie.

Risposte:


3

Calcolare un hash MD5 di ogni file (suggerito nella domanda e i collegamenti dalle risposte) sembra essere un modo abbastanza "costoso" per risolvere il problema. Ignorando il calcolo effettivo di ciascun hash, solo leggendo ciascuno di essi ogni file svolge un sacco di lavoro sul disco rigido (estremamente lento).

Il mio suggerimento per un "algoritmo" sarebbe qualcosa che collega questo:

  • Ottieni la lunghezza esatta di ogni file sull'unità (o directory o altro). Questo dovrebbe essere relativamente economico, poiché è probabile che la lunghezza venga memorizzata nella parte dell'indice del file system.
  • Per ogni dimensione di file univoca con più di un file associato, calcola l'MD5 di ciascuno di questi e confronta i valori hash per individuare i duplicati. Anche se non molto probabile, due file con la stessa lunghezza potrebbero avere lo stesso valore. Se non si vuole correre il rischio di falsi positivi, confrontare i file byte per byte o dopo il confronto dell'hash.
  • Per ogni altra dimensione di file univoca, non hai duplicati.

1
Vorrei controllare le dimensioni, su dimensioni di file dup, controllare i primi 512 byte (un settore), e se è lo stesso, quindi il computer md5. Ma tieni a mente che md5 legge l'intero file per il calcolo, quindi perché non solo il binario confronta l'intero file per essere sicuro (dopotutto, md5 è rotto)
Cole Johnson

"due file con la stessa lunghezza": no, è ancora più generale: "due file": una possibile collisione md5 non richiede la stessa lunghezza di input (lo stesso è vero per sha * etc).
akira

2

Se md5 dice che è lo stesso file, non è necessario il diff. Le persone hanno risolto questo problema un buon numero di volte in modo da poter fare quello che loro fatto .


3
Uh, sì, hai bisogno del diff per essere certo che siano uguali. MD5 emette solo 128 bit, quindi se il file è più grande di quello, deve necessariamente essere possibile trovare due file A e B che hanno lo stesso MD5, ma non hanno lo stesso contenuto. Se due file hanno MD5 diverso, allora sai che sono diversi, ma l'inverso non è il caso - devi confrontare ogni byte del file se vuoi essere assolutamente certo che sono diversi.

2
quindi se il mio file è più grande di 128 po Devo passare attraverso tutti i 100 megabyte , per esempio?? Ciò non suona bene, poiché l'intero punto dell'hashing è l'hashing intero file. Mentre ci sono duplicati che si verificano quando si utilizza l'hash MD5, le probabilità di una che si verifica tra due file non dannosi generati dall'utente sono estremamente basse. SHA 256 o 512 è preferito ora.
MDMoore313

@ Michael Con un buon hash a 128 bit, ci sono circa 10 ^ 40 valori di output possibili. Se una sovrapposizione di due di questi valori è il tipo di rischio che ti tiene sveglio la notte ... beh, dirò solo che non mi tiene sveglio la notte. ;)
Tomislav Nakic-Alfirevic

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.