se hai installato vim, prova questo:
vimdiff file1 file2
o
vim -d file1 file2
lo troverai fantastico.
Prova sdiff
(man sdiff
)
sdiff -s file1 file2
Se preferisci lo stile di output diff da git diff
, puoi usarlo con il --no-index
flag per confrontare i file non in un repository git:
git diff --no-index a.txt b.txt
Usando un paio di file con circa 200.000 stringhe di nomi di file ciascuno, ho eseguito un benchmark (con il time
integrato comando) questo approccio rispetto ad alcune delle altre risposte qui:
git diff --no-index a.txt b.txt
# ~1.2s
comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s
diff a.txt b.txt
# ~2.6s
sdiff a.txt b.txt
# ~2.7s
vimdiff a.txt b.txt
# ~3.2s
comm
sembra essere di gran lunga il più veloce, mentre git diff --no-index
sembra essere l'approccio più rapido per l'output in stile diff.
Aggiornamento 25-03-2018 Puoi effettivamente omettere il --no-index
flag a meno che tu non sia all'interno di un repository git e desideri confrontare i file non tracciati all'interno di quel repository. Dalle pagine man:
Questo modulo serve per confrontare i due percorsi dati sul filesystem. Puoi omettere l'opzione --no-index quando esegui il comando in un albero di lavoro controllato da Git e almeno uno dei percorsi punta all'esterno dell'albero di lavoro, o quando esegui il comando al di fuori di un albero di lavoro controllato da Git.
Ordinali e usa comm
:
comm -23 <(sort a.txt) <(sort b.txt)
comm
confronta i file di input (ordinati) e per impostazione predefinita restituisce tre colonne:righe che sono univoche per a, righe che sono univoche per b e righe che sono presenti in entrambi. Specificando -1
, -2
e/o -3
è possibile sopprimere l'output corrispondente. Pertanto comm -23 a b
elenca solo le voci che sono univoche per a. Uso il <(...)
sintassi per ordinare i file al volo, se sono già ordinati non è necessario.