si vim est installé, essayez ceci :
vimdiff file1 file2
ou
vim -d file1 file2
vous le trouverez fantastique.
Essayez sdiff
(man sdiff
)
sdiff -s file1 file2
Si vous préférez le style de sortie diff de git diff
, vous pouvez l'utiliser avec le --no-index
flag pour comparer les fichiers qui ne se trouvent pas dans un dépôt git :
git diff --no-index a.txt b.txt
En utilisant quelques fichiers avec environ 200 000 chaînes de noms de fichiers dans chacun, j'ai comparé (avec le time
intégré commande) cette approche par rapport à certaines des autres réponses ici :
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
semble être de loin le plus rapide, tandis que git diff --no-index
semble être l'approche la plus rapide pour une sortie de style diff.
Mise à jour 2018-03-25 Vous pouvez en fait omettre le --no-index
sauf si vous êtes dans un référentiel git et que vous souhaitez comparer des fichiers non suivis au sein de ce référentiel. À partir des pages de manuel :
Ce formulaire consiste à comparer les deux chemins donnés sur le système de fichiers. Vous pouvez omettre l'option --no-index lors de l'exécution de la commande dans un arbre de travail contrôlé par Git et qu'au moins l'un des chemins pointe en dehors de l'arbre de travail, ou lors de l'exécution de la commande en dehors d'un arbre de travail contrôlé par Git.
Triez-les et utilisez comm
:
comm -23 <(sort a.txt) <(sort b.txt)
comm
compare les fichiers d'entrée (triés) et génère par défaut trois colonnes :les lignes uniques à a, les lignes uniques à b et les lignes présentes dans les deux. En spécifiant -1
, -2
et/ou -3
vous pouvez supprimer la sortie correspondante. Donc comm -23 a b
répertorie uniquement les entrées qui sont uniques à a. J'utilise le <(...)
syntaxe pour trier les fichiers à la volée, s'ils sont déjà triés, vous n'en avez pas besoin.