# 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` [https://linuxhandbook.com/vimdiff/](https://linuxhandbook.com/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)
