Comando diff

Finalità

Confronta i file di testo.

Sintassi

Per confrontare il contenuto di due file

diff [ -c| -C Linee | -D [ Stringa ] | -e | -f | -n | -u | -U Linee ] [ -b ] [ -i ] [ -s ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

Per ordinare il contenuto delle directory e confrontare i file diversi

diff [ -c | -C Linee | -e | -f | -n | -u | -U Linee ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S File ] [ -t ] [ -p ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

Descrizione

Il comando diff confronta i file di testo. Può confrontare singoli file o il contenuto delle directory.
Nota: il comando diff funziona solo con i file di input che sono file di testo.

Se vengono specificati i parametri Directory1 e Directory2 , il comando diff confronta i file di testo che hanno lo stesso nome in entrambe le directory. Vengono elencati i file binari che differiscono, le sottodirectory comuni e i file che appaiono in una sola directory.

Quando il comando diff viene eseguito su file regolari e quando si confrontano file di testo che differiscono durante il confronto di directory, il comando diff indica quali righe devono essere modificate nei file per essere accettate. Se né il parametro File1File2 è una directory, è possibile che venga fornito come - (segno meno), nel qual caso viene utilizzato l'input standard. Se il parametro File1 è una directory, viene utilizzato un file in tale directory il cui nome file è lo stesso del parametro File2 .

L'output tipico contiene righe di questi formati:

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

Queste righe sono simili ai sottocomandi ed per convertire File1 in File2. I numeri prima delle lettere di azione riguardano File1; quelli dopo File2. Quindi, scambiando a per d e leggendo da destra a sinistra, si può anche dire come convertire File2 in File1. Come nel comando ed , le coppie identiche (dove Number1 = Number2) sono abbreviate come un singolo numero.

Dopo ciascuna di queste righe, il comando diff visualizza tutte le righe interessate nel primo file precedute da un <: (segno minore di, due punti), quindi visualizza tutte le righe interessate nel secondo file precedute da un > (segno maggiore di).

Un valore di uscita 0 indica nessuna differenza, 1 indica le differenze rilevate e 2 indica un errore.

Nota: se sono specificati più di uno degli indicatori -c, -C, -D, -e, -fo -n, -uo -U , l'ultimo sulla riga comandi ha la precedenza. Il sistema non emette un messaggio di errore.

Indicatori

Elemento Descrizione
-b Fa sì che qualsiasi quantità di spazio vuoto alla fine di una riga venga considerata come un singolo carattere di nuova riga (i caratteri di spazio bianco che precedono il carattere di nuova riga vengono ignorati) e altre stringhe di caratteri di spazio bianco, non inclusi i caratteri di nuova riga, per eseguire il confronto in modo uguale.
-C Linee Produce un confronto del comando diff con un numero di righe di contesto copiato uguale al valore specificato dalla variabile Linee . L'indicatore -C modifica leggermente l'output. L'output inizia con l'identificazione dei file coinvolti e le relative date di creazione. Ogni modifica è separata da una riga con una dozzina*(asterischi). Le righe rimosse da File1 sono contrassegnate con un-(segno meno) e quelli aggiunti a File2 sono contrassegnati con un+(segno più). Le righe modificate da un file all'altro vengono contrassegnate in entrambi i file con un!(punto esclamativo). Le modifiche che si trovano all'interno delle righe di contesto copiate specificate l'una dell'altra vengono raggruppate come output.
-c Produce un confronto del comando diff con tre righe del contesto copiato . L'indicatore -c modifica leggermente l'output. L'output inizia con l'identificazione dei file coinvolti e le relative date di creazione. Ogni modifica è separata da una riga con una dozzina*(asterischi). Le righe rimosse da File1 sono contrassegnate con un-(segno meno) e quelli aggiunti a File2 sono contrassegnati con un+(segno più). Le righe modificate da un file all'altro vengono contrassegnate in entrambi i file con un!(punto esclamativo). Le modifiche all'interno delle righe di contesto copiate specificate vengono raggruppate come output.
-D [ Stringa ] Il comando diff crea una versione unita di File1 e File2 nell'output standard. I controlli del preprocessore C sono inclusi in modo che una compilazione del risultato senza definire String sia equivalente alla compilazione di File1, mentre la definizione di String restituisce File2.
-e Produce l'output in un modulo adatto all'utilizzo con l'editor ed per convertire File1 in File2. Quando si utilizza questo indicatore, il seguente programma shell può aiutare a mantenere più versioni di un file. Solo un file ancestrale ($1) e una catena di script versione a versione ($2, $3, ...) eseguito dal comando diff deve essere disponibile. L'ultima versione viene visualizzata nell'output standard nel modo seguente:
(shift; cat $*; echo '1,$p') | ed - $1
Ulteriori comandi vengono aggiunti all'output quando l'indicatore -e viene utilizzato per confrontare le directory, in modo che il risultato sia uno script shell per convertire i file di testo comuni alle due directory dal relativo stato in Directory1 al relativo stato in Directory2.
Nota: la modifica degli script prodotti dagli indicatori -e o -f non può creare righe composte da una singola riga. (punto).
-F Produce l'output in un formato non adatto all'utilizzo con l'editor ed , mostrando le modifiche necessarie per convertire File1 in File2 nell'ordine inverso di quello prodotto nell'indicatore -e .
-h Esegue un confronto alternativo che può essere più rapido se le sezioni modificate sono brevi e ben separate. L'indicatore -h funziona su file di qualsiasi lunghezza. Gli indicatori -c, -C, -D, -e, -fe -n non possono essere usati con l'indicatore -h . Tutti gli altri indicatori tranne l'indicatore -b vengono ignorati quando vengono utilizzati con l'indicatore -h .
-i Ignora il maiuscolo / minuscolo delle lettere. Ad esempio, una a minuscola viene trattata come una Amaiuscola.
-l Formato di output lungo. Ciascun risultato del confronto del file di testo del comando diff viene reimmesso tramite il comando pr per la paginazione. Altre differenze vengono memorizzate e riepilogate dopo che sono state riportate tutte le differenze del file di testo.
-n Produce un output simile a quello dell'indicatore -e , ma nell'ordine opposto e con un conteggio di righe modificate su ogni comando di inserimento o eliminazione. Questo è il modulo utilizzato dal sistema di controllo revisione (RCS).
-R Causa l'applicazione del comando diff in modo ricorsivo alle directory secondarie comuni rilevate.
-s Riporta i file uguali e non menzionati.
- S [ File ] Ignora i file i cui nomi sono ordinati prima del file specificato dalla variabile File durante il confronto delle directory. L'indicatore -S si applica solo alle directory specificate nei parametri Directory1 e Directory2 . Se si utilizza l'indicatore -r con l'indicatore -S , -S non funziona in modo ricorsivo nelle sottodirectory Directory1 e Directory2 .
-t Espande le schede nelle linee di output. L'output tipico o l'output dell'indicatore -c aggiunge caratteri alla parte anteriore di ogni riga, il che può influire sul rientro delle righe di origine originali e rende l'elenco di output difficile da interpretare. Questo indicatore conserva il rientro dell'origine originale.
-u Produce un confronto dei comandi diff con tre righe di contesto unificato.

L'output è simile a quello dell'indicatore -c , tranne per il fatto che le righe di contesto non sono ripetute; invece, le righe di contesto, eliminate e aggiunte vengono mostrate insieme, con interfoliazione.

-U Linee Produce un confronto dei comandi diff con un numero di righe di contesto unificato uguale al valore specificato dalla variabile Linee . L'output è simile a quello dell'indicatore -C , ad eccezione del fatto che le righe di contesto non sono ripetute; invece, le righe di contesto, eliminate e aggiunte vengono mostrate insieme, intercalate.
-w Ignora tutti gli spazi e i caratteri di tabulazione e considera tutte le altre stringhe di spazi come equivalenti. Ad esempio:if ( a == b )confronta equamente conif(a==b).

Stato uscita

Questo comando restituisce i seguenti valori di uscita:

Elemento Descrizione
0 Non sono state trovate differenze.
ERROR! SEGMENT DATA CORRUPTED, SEGDATA=1 Sono state trovate differenze.
> 1 Si è verificato un errore.

Esempi

  1. Per confrontare due file, immettere:
    diff chap1.back chap1
    Visualizza le differenze tra i filechap1.bakechap1.
  2. Per confrontare due file ignorando le differenze nella quantità di spazio vuoto, immettere:
    diff  -w prog.c.bak prog.c
    Se due righe differiscono solo per il numero di spazi e tabulazioni tra le parole, il comando diff -w le considera uguali.
  3. Per creare un file contenente i comandi che il comando ed può utilizzare per ricostruire un file da un altro, immettere:
    diff  -e chap2 chap2.old >new.to.old.ed
    In questo modo viene creato un file denominatonew.to.old.edche contiene i sottocomandi ed per modificarechap2nella versione del testo trovato inchap2.old. Nella maggior parte dei casi,new.to.old.edè un file molto più piccolo dichap2.old. È possibile risparmiare spazio su disco eliminandochap2.olded è possibile ricostruirlo in qualsiasi momento immettendo:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    I comandi tra parentesi aggiungono1,$palla fine dei comandi di modifica inviati all'editor ed . L'intestazione1,$pfa sì che il comando ed scriva il file nell'output standard dopo la modifica. Questa sequenza di comandi modificata viene quindi reindirizzata al comando ed (| ed) e l'editor lo legge come input standard. L'indicatore - fa sì che il comando ed non visualizzi la dimensione del file e altre informazioni aggiuntive poiché verrebbe combinato con il testo dichap2.old.

File

Elemento Descrizione
/usr/bin/diff Contiene il comando diff .