Gemelli o diversi?

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.

Barra degli strumenti di Anteprima

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 nel mio Terminale.

Esecuzione del comando md5 da 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 rinominato md5sum. 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.

Annunci
Tagged with: , , , ,
Pubblicato su software
4 comments on “Gemelli o diversi?
  1. frix ha detto:

    Interessante, grazie.
    Personalmente Terminale lo lancio (ora) con ‘Alfred’, prima con ‘quicksilver’. Non potrei più fare a meno di uno dei due.

    Da anni mi ripropongo di studiare Terminale un po’ più a fondo e poi non lo faccio limitando ad applicarmici sulle cose che mi servono (come ad es. texdoc).

    Metteroò anche md5 -q nella raccolta di utilità da terminale.

    Mi piace

  2. Sabino Maggi ha detto:

    Secondo me non devi pensare di studiare il Terminale. Se parti da zero non lo farai mai. Devi solo iniziare ad usarlo, anche per cose piccole e limitate come queste.
    Più lo usi e più ti accorgerai di quanto sia utile per svolgere i compiti ripetitivi (e non solo) e intanto imparerai i comandi principali.

    Mi piace

  3. frix ha detto:

    Ma si, è vero.
    Dico studiare perché ho un paio di libri e un folder di articoli e link che uso quando devo cercare di capire come fare qualcosa col terminale.
    Resta il fatto però che a me mancano le basi informatiche, all’università feci un solo esame che, per giunta, insegnava i rudimenti del Basic. Basi solide di unix consentono di muoversi molto piùagevolmente in Terminale
    Prima o poi vorrei approfondire, per capire meglio.

    Mi piace

  4. Sabino Maggi ha detto:

    Hai ragione, un po’ di basi non fanno mai male. Soprattutto sapere un po’ cosa significa programmare. Prova con Python, l’ho detto e l’ho ridetto, è il Basic di oggi. E ci sono anche ottimi strumenti di aiuto online, in ordine casuale, tranne l’ultimo link che è più avanzato.

    How to Think Like a Computer Scientist Interactive Edition
    PythonAnywhere
    Computer Science Circles
    Online Python Tutor

    Poi ci vuole un po’ di conoscenza di Unix, ma quella arriva (anche) prrovando e riprovando ad usare il terminale e magari leggendo qualche libro/articolo su Linux.

    Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Informativa
Questo sito utilizza cookie di terze parti per inviarti pubblicità e servizi in linea con le tue preferenze. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie, clicca qui. Scorrendo questa pagina, cliccando su un link o su qualunque altro elemento o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie.
Follow MelaBit on WordPress.com
Categorie
Archivi
%d blogger hanno fatto clic su Mi Piace per questo: