Mi capita spesso di ricevere o scaricare dei documenti senza riuscire a capire immediatamente se sono nuove versioni di file che ho già sul Mac o se ho solo prelevato lo stesso file con un nome diverso.
La soluzione più immediata è quella di aprire i documenti in due finestre affiancate e confrontarli ad occhio nudo. È una soluzione perfetta se i documenti sono profondamente diversi, ma non funziona se le differenze sono limitate a poche parole sparse qua e là.
Per essere sicuri al 100% che i file siano identici, basta utilizzare il Terminale di OS X. Il comando in questione è md5
che, in base al manuale, calcola una specie di firma digitale (detta hash) del file che gli viene fornito in ingresso. Il comando utilizza il ben noto algoritmo MD5, che è descritto nei dettagli nell’RFC1321. La particolarità dell’algoritmo è che la probabilità che due file diversi producano lo stesso hash (la cosiddetta collisione
) è estremamente bassa.
Questo algoritmo è stato ormai ampiamente superato nelle applicazioni crittografiche, ma per i nostri scopi va più che bene.
Per controllare quindi che due file siano o meno identici, basta lanciare il Terminale (è in Applicazioni ➔ Utility
, ma sarebbe meglio trascinarne una volta per tutte l’icona nel Dock), scrivere md5 -q
seguito da uno spazio e trascinare una alla volta nel Terminale le icone dei (due o più) file da confrontare, premendo alla fine il tasto Invio. Il risultato è una serie di stringhe alfanumeriche, corrispondenti a ciascuno dei file controllati. Se le stringhe sono uguali lo sono di sicuro anche i file (a meno di casi eccezionali), in caso contrario possiamo essere certi che i file in ingresso differiscono fra loro, anche per un solo carattere.
Un esempio pratico
Prendiamo un file PDF qualunque, File_A1.pdf
, trasciniamolo sul Desktop e duplichiamolo, rinominando la copia come File_A2.pdf
. Lanciamo il Terminale ed eseguiamo i seguenti comandi (notare che il $
è il prompt del Terminale e non va inserito):
$ cd ~/Desktop
per spostarci nella cartella del Desktop,
$ md5 -q File_A1.pdf File_A2.pdf
che produce in uscita le due stringhe
8610396351906b395de49dccc7470ebf
8610396351906b395de49dccc7470ebf
corrispondenti rispettivamente ai miei due file di partenza File_A1.pdf
e File_A2.pdf
. Le due stringhe sono identiche e quindi, come sappiamo, anche i file controllati sono identici (ovviamente usando altri file le stringhe di output saranno differenti da queste).
Si noti che ho preferisco usare l’opzione -q
(quiet) per evitare che il comando md5
stampi il percorso completo dei file controllati, che rende molto più complicato trovare a prima vista la stringa di hash. Provare per credere.
Duplichiamo ancora il file File_A1.pdf
, rinominandolo questa volta come File_B.pdf
. Lanciamo Anteprima
ed apriamo il file File_B.pdf
. Nelle ultime versioni di OS X Anteprima permette di modificare (parzialmente) il testo dei file pdf o di aggiungere evidenziazioni al testo. Per farlo, basta premere l’icona Edit
(l’ultima a destra sulla barra degli strumenti) oppure selezionare la voce corrispondente posta nel menu Vista
.
Modifichiamo in qualche modo il file, ad esempio selezionando con un doppio click una parola ed evidenziandola con Strumenti ➔ Annota ➔ Evidenzia il Testo
, e salviamo il file modificato.
Torniamo al Terminale ed eseguiamo il comando
$ md5 -q File_A1.pdf File_B.pdf
8610396351906b395de49dccc7470ebf
22908db2457cf64af17c1296cb5f37e1
che ci mostra immediatamente come ora il secondo file sia ora diverso da quello originale. La figura seguente mostra l’esecuzione completa dei comandi ne mio Terminale.
Tre brevi commenti per concludere:
-
Il comando
md5
è disponibile di default su OS X (ovviamente!) e su qualunque distribuzione moderna di Linux e Unix, dove però viene generalmente rinominatomd5sum
. In Windows, invece, si può installare il File Checksum Integrity Verifier (FCIV), uno strumento semi-ufficiale della Microsoft, che permette di calcolare la firma digitale di un file mediante vari algoritmi, fra cui l’md5. -
La variante
md5 -s "Questa e' una stringa"
permette di calcolare l’hash di una stringa qualunque, aprendo la porta ad applicazioni nel campo della generazione casuale di password forti a partire da stringhe facilmente memorizzabili. -
I programmi che trovano automaticamente i file duplicati sull’hard-disk funzionano più o meno su queste basi.