Quando si tratta di confrontare i file, vengono utilizzati principalmente software basati su GUI. Se sei un utente Linux, penso che dovresti sapere come confrontare due file tramite riga di comando poiché è sicuramente un metodo rapido una volta che ci sei abituato.
In questo tutorial impareremo come utilizzare il comando diff attraverso alcuni esempi pratici.
Comando Linux diff
Comprendiamo il comando diff di Linux attraverso alcuni esempi pratici.
Supponiamo di avere questi due file (file1 e file2):
$ cat file1
Hi,
Hello,
How are you?
I am fine,
Thank you.
$ cat file2
Hello,
Hi,
How are you?
I am fine.
Puoi vedere che entrambi i file hanno alcune piccole differenze. Ora, vediamo come utilizzare il comando diff per far emergere queste differenze.
Ecco come eseguire il comando diff:
$ diff file1 file2
1d0
< Hi, 2a2 > Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
Quindi puoi vedere che il comando diff è stato fornito con entrambi i nomi dei file come argomenti della riga di comando e ha prodotto le differenze nell'output. L'output non è affatto facilmente comprensibile. Il motivo è che è stato progettato per essere utilizzato dai computer e non dagli esseri umani. Tuttavia, decodifichiamo l'output pezzo per pezzo:
NOTA - I file file1 e file2 verranno indirizzati come file vecchio e nuovo file nel testo seguente.
1d0
< Hi,
Qui, la riga 1d0 significa che la prima riga del vecchio file deve essere cancellata (d) per sincronizzare entrambi i file a partire dalla riga 0. La riga da eliminare nel vecchio file è menzionata appena sotto con
Qui, la riga 2a2 significa che la seconda riga del nuovo file deve essere aggiunta dopo la seconda riga del vecchio file. La riga da aggiungere viene visualizzata nella riga successiva dell'output con> contrassegno.
Qui, la riga 4,5c4 significa che i numeri di riga compresi tra 4 e 5 nel vecchio file sono ora modificati e devono essere sostituiti con la 4a riga del nuovo file. Le righe da aggiungere ed eliminare sono contrassegnate rispettivamente con> e <.
Quindi, per concludere,
Oltre ai file, il comando diff può essere utilizzato anche per confrontare due directory. Impariamo questo attraverso un esempio.
Ecco il contenuto di una directory denominata 'new_dir' :
e qui ci sono i contenuti di una directory chiamata 'old_dir' :
Ora, ecco l'output quando è stato eseguito il comando diff:
Quindi puoi vedere che quando il comando diff viene eseguito per confrontare queste due directory, mostra facilmente i file mancanti nelle directory.
Ecco alcune delle opzioni della riga di comando comunemente utilizzate:
Se due file contengono lo stesso testo ma in casi diversi, il comando diff lo segnala comunque come differenza per impostazione predefinita.
Ad esempio :
Quindi puoi vedere che il comando diff ha riportato la differenza tra maiuscole e minuscole nell'output.
Per farla franca con questo comportamento predefinito, usa l'opzione -i.
Ecco un esempio :
Quindi puoi vedere che non è stato prodotto alcun output, che è il comportamento predefinito quando entrambi i file sono uguali.
Verso la fine dell'esempio 1, abbiamo visto che diff non riporta nulla se i file sono gli stessi. Sebbene questo comportamento predefinito vada bene, potrebbe comunque confondere molti, specialmente i principianti. Quindi, se vuoi che il comando diff riporti esplicitamente che i file sono gli stessi, usa l'opzione della riga di comando -s.
Ecco un esempio :
Quindi puoi vedere che ho aggiunto l'opzione -s nel comando che abbiamo usato nell'ultimo esempio e questa volta il comando diff ha riportato esplicitamente che entrambi i file sono identici.
Un altro caso d'uso comune è la quantità variabile di spazi per i quali il comando diff segnala i file come diversi.
Ecco un esempio :
Osservare che l'unica differenza tra i file di traino è lo spazio extra tra le parole "sono" e "tu" in file2. Ora, quando il comando diff viene utilizzato per confrontare questi due file, ecco l'output:
Quindi puoi vedere che il comando diff ha riportato la differenza. Ma se vuoi che diff ignori questi spazi, usa l'opzione -b:
Quindi puoi vedere che a causa dell'opzione -b, il comando diff ha riportato entrambi i file come uguali.
Suggerimento per i comandi :
Il comando seguente visualizzerà tutte le differenze di file tra due cartelle
Il comando diff fornisce molte più opzioni della riga di comando. Leggi la sua pagina man per l'elenco completo.2a2
> Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
$ ls new_dir/
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt
$ ls orig_dir/
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test
file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
$ diff new_dir/ orig_dir/
Only in new_dir/: file
Only in orig_dir/: test
1) Usa -i per ignorare le differenze tra maiuscole e minuscole
$ cat file1
HI
$ cat file2
hi
$ diff file1 file2
1c1
< HI --- > hi
$ diff -i file1 file2
$
2) Segnala che i file sono uguali usando l'opzione -s
$ diff -is file1 file2
Files file1 and file2 are identical
3) Usa -b per ignorare gli spazi
$ cat file1
Hi, how are you?
$ cat file2
Hi, how are you?
$ diff file1 file2
1c1
< Hi, how are you?
---
> Hi, how are you?
$ diff -b file1 file2
$
diff -Naur old/ new/