# Confrontare file Il comando `diff` confronta due file e produce una lista delle loro differenze. Per essere più precisi, produce un elenco delle modifiche che dovrebbero essere apportate al primo file, per farlo corrispondere al secondo file. ```bash diff file1 file2 ``` Ecco un esempio: ```bash > cat file1 file1 > cat file2 file2 file3 file1 > diff file1 file2 0a1,2 > file2 > file3 ``` Ogni differenza è elencata a sua volta in una singola colonna e ogni differenza viene etichettata. L'etichetta è composta da due numeri che circondano una lettera, come nell'esempio `0a1`. Il primo numero è il numero di riga in file1, e il secondo numero è il numero di riga in file2. La lettera nel mezzo può essere: - `c`: la riga nel primo file deve essere modificata per corrispondere alla riga nel secondo file; - `d`: la riga nel primo file deve essere eliminata; - `a`: il contenuto extra deve essere aggiunto al primo file per farlo corrispondere al secondo file. I parametri `-s` e `-q` indicano, rispettivamente, se i due file sono identici ovvero differenti: ```bash > diff -s file2 file3 I file file2 e file3 sono identici > diff -q file1 file2 I file file1 e file2 sono diversi ``` ## Una vista alternativa ```bash > diff -y -W 70 file1 file3 > file2 file5 | file3 file1 file1 file4 < ``` L'opzione `-y` (side by side) utilizza un layout diverso per mostrare le differenze tra i file. Spesso è conveniente specificare la larghezza `-W` per limitare il numero di colonne visualizzate. Il primo file viene visualizzato a sinistra mentre il secondo è mostrato sulla destra. Le righe di ogni file vengono visualizzate fianco a fianco. Ci sono caratteri indicatori accanto alle varie righe: - `|`: una riga che è differente nel secondo file; - `<`: una riga che non è presente nel secondo file; - `>`: una riga che non è presente nel primo file ## Uno spruzzo di colore ```bash sudo apt-get install colordiff ``` Il comando `colordiff` aggiunge colore all'output di `diff`. ## Confrontare directories Il comando diff permette anche di confrontare cartelle tra loro. La sintassi è molto semplice: ```bash diff -r dir1 dir2 ``` Vengono mostrati i nomi dei file/directories differenti e le differenze tra i files. Con l'opzione `-q` viene mostrato solo il nome dei files diversi. ```bash ls -R .: dir1 dir2 ./dir1: file1 ./dir2: colordiff -rq dir1 dir2 Solo in dir1: file1 ``` ## Vimdiff Per chi utilizza vim, esiste `vimdiff`. ## Collegamenti - [https://www.howtogeek.com/410532/how-to-compare-two-text-files-in-the-linux-terminal/](https://www.howtogeek.com/410532/how-to-compare-two-text-files-in-the-linux-terminal/) - [https://linuxhandbook.com/compare-directories/](https://linuxhandbook.com/compare-directories/) - [https://youtu.be/Eb8S_KkmLS8](https://youtu.be/Eb8S_KkmLS8)