Mattepuffo

Guida a diff

Guida a diff

diff è un comando *.NIX usato per trovare le differenze tra file, directory e file e directory.

Ci stanno diversi front-end grafici volendo, sia per GTK che per Qt, ma comunque non è difficile usarlo.

Vediamo quindi qualche esempio.

Quello più banale:

$ diff dir_a/file_a.txt dir_b/file_b.txt

1c1,2

< a

\ No newline at end of file

---

> a

> b

\ No newline at end of file

Così controllo le differenze dei due file.

Il primo ha solo una riga con scritto a, il secondo due righe con a e b.

Se vogliamo vedere solo le differenze:

$ diff -q dir_a/file_a.txt dir_b/file_b.txt

Files dir_a/file_a.txt and dir_b/file_b.txt differ

Però come vedete non viene riportata nessuna info sulle differenze.

L'opzione -s invece riporta un messaggio se i file sono identici.

Ripetendo gli esempi con file uguali:

$ diff dir_a/file_a.txt dir_b/file_b.txt

$ diff -q dir_a/file_a.txt dir_b/file_b.txt

$ diff -s dir_a/file_a.txt dir_b/file_b.txt

Files dir_a/file_a.txt and dir_b/file_b.txt are identical

I primi due comandi non riportano messaggi.

Ovviamente tutti questi comandi possono anche essere applicati alle directory.

In questo caso possiamo usare lo switch -r per scannerizzare le directory ricorsivamente:

$ diff -r dir_a/ dir_b/

Binary files dir_a/.DS_Store and dir_b/.DS_Store differ

Only in dir_a/: file_a.txt

Only in dir_b/: file_b.txt

Only in dir_a/: sub_dir_a

Only in dir_b/: sub_dir_b

Altre opzioni interessanti sono:

  • -N o --new-file confrontando due directory, se un file viene trovato solamente su una delle due directory, allora diff tratta il file come se esistesse anche sull'altra directory, ma fosse vuoto. In questo modo i nuovi e i vecchi files sono trasmessi in output integralmente come differenza da aggiungere o da togliere totalmente dal vecchio file.
  • -P o --unidirectional-new-file confrontando due directory, se un file viene trovato solo sulla seconda directory, diff tratta il file come se esistesse anche sulla prima directory, ma fosse vuoto. In questo modo i nuovi files sono trasmessi in output integralmente come differenza da aggiungere totalmente al vecchio file.
  • -a o --text il confronto viene forzato fra file di tipo testo.
  • -i o --ignore-case il confronto viene effettuato considerando equivalenti i caratteri maiuscoli e minuscoli.

Inoltre potete anche formattare l'output in diversi modi.

Controllate la man page per ulteriori dettagli!