Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

diff

Come comm programma, diff viene utilizzato per rilevare le differenze tra i file. Tuttavia, diff è uno strumento molto più complesso, che supporta molti formati di output e ha la capacità di elaborare grandi raccolte di file di testo contemporaneamente. diff viene spesso utilizzato dagli sviluppatori di software per esaminare le modifiche tra diverse versioni del codice sorgente del programma e quindi ha la capacità di esaminare ricorsivamente le directory del codice sorgente, spesso denominate alberi di origineUn uso comune per diff è la creazione di file diff or patch che vengono utilizzati da programmi come patch (di cui parleremo tra poco) per convertire una versione di un file (o di più file) in un'altra versione.

Se usiamo diff per guardare i nostri file di esempio precedenti:


[io@linuxbox~]$ diff file1.txt file2.txt

1d0

< a 4a4

> e

[io@linuxbox~]$ diff file1.txt file2.txt

1d0

< a 4a4

> e


vediamo il suo stile di output predefinito: una descrizione concisa delle differenze tra i due file. Nel formato predefinito, ogni gruppo di modifiche è preceduto da un cambia comando nella forma di gamma di funzionamento per descrivere le posizioni e i tipi di modifiche necessarie per convertire il primo file nel secondo file:


Tabella 20-4: comandi di modifica diff


Descrizione della modifica

Descrizione della modifica

r1ar2 Aggiungi le linee nella posizione r2 nella seconda fila alla posizione

r1 nel primo file.


Immagine

r1cr2 Cambia (sostituisci) le linee in posizione r1 con le linee nella posizione r2 nel secondo file.


Immagine

r1dr2 Elimina le righe nel primo file nella posizione r1, che sarebbe apparso a distanza r2 nel secondo file


Immagine


In questo formato, un intervallo è un elenco separato da virgole della riga iniziale e della riga finale. Sebbene questo formato sia quello predefinito (principalmente per la conformità POSIX e la retrocompatibilità con le versioni Unix tradizionali di diff), non è così ampiamente utilizzato come altri formati opzionali. Due dei formati più popolari sono formato del contesto e la formato unificato.

Quando visualizzato utilizzando il formato di contesto (il -c opzione), vedremo questo:


[io@linuxbox~]$ diff -c file1.txt file2.txt

*** file1.txt 2008-12-23 06:40:13.000000000 -0500

--- file2.txt 2008-12-23 06:40:34.000000000 -0500

***************

*** 1,4 ****

- abcd

--- 1,4 ----

bcd

+ es

[io@linuxbox~]$ diff -c file1.txt file2.txt

*** file1.txt 2008-12-23 06:40:13.000000000 -0500

--- file2.txt 2008-12-23 06:40:34.000000000 -0500

***************

*** 1,4 ****

- abcd

--- 1,4 ----

bcd

+ es


L'output inizia con i nomi dei due file e i rispettivi timestamp. Il primo file è contrassegnato da asterischi e il secondo da trattini. Nel resto dell'elenco, questi marcatori indicheranno i rispettivi file. Successivamente, vediamo gruppi di modifiche, incluso il numero predefinito di righe di contesto circostanti. Nel primo gruppo, vediamo:

*** 1,4 ***

che indica le righe da 1 a 4 nel primo file. Più avanti vedremo:

--- 1,4 ---

che indica le righe da 1 a 4 nel secondo file. All'interno di un gruppo di modifiche, le righe iniziano con uno dei quattro indicatori:


Tabella 20-5: Indicatori di modifica del formato del contesto diff


Significato dell'indicatore

Significato dell'indicatore

vuoto Una riga mostrata per contesto. Non indica una differenza tra i due file.


Immagine

- Una riga eliminata. Questa riga apparirà nel primo file ma non nel secondo.


Immagine


Immagine

+ Aggiunta una riga. Questa riga apparirà nel secondo file ma non nel primo.


Immagine

! Una riga è stata modificata. Verranno visualizzate le due versioni della riga, ciascuna nella rispettiva sezione del gruppo di modifica.


Immagine


Il formato unificato è simile al formato contestuale ma è più conciso. È specificato con -u opzione:


[io@linuxbox~]$ diff -u file1.txt file2.txt

--- file1.txt 2008-12-23 06:40:13.000000000 -0500

+++ file2.txt 2008-12-23 06:40:34.000000000 -0500

@@ -1,4 +1,4 @@

-abcd

+e

[io@linuxbox~]$ diff -u file1.txt file2.txt

--- file1.txt 2008-12-23 06:40:13.000000000 -0500

+++ file2.txt 2008-12-23 06:40:34.000000000 -0500

@@ -1,4 +1,4 @@

-abcd

+e


La differenza più evidente tra il formato contesto e quello unificato è l'eliminazione delle righe duplicate del contesto, rendendo i risultati del formato unificato più brevi di quelli del formato contesto. Nel nostro esempio precedente, vediamo timestamp dei file simili a quelli del formato contesto, seguiti dalla stringa @@ -1,4 +1,4 @@. Indica le righe del primo file e le righe del secondo file descritte nel gruppo di modifiche. Seguono le righe stesse, con le tre righe di contesto predefinite. Ogni riga inizia con uno dei tre possibili caratteri:


Tabella 20-6: indicatori di modifica del formato unificato diff


Significato del carattere

Significato del carattere

vuoto Questa riga è condivisa da entrambi i file.


Immagine

- Questa riga è stata rimossa dal primo file.


Immagine

+ Questa riga è stata aggiunta al primo file.


Immagine


Il miglior sistema operativo cloud computing su OnWorks: