Voir la différence entre deux répertoires avec find et vimdiff
Bien sûr, c'est plus facile et plus beau d'utiliser meld (par exemple) mais si on est sur un
serveur…
C'est aussi plus facile si on a git : git diff répertoire1/ répertoire2/
Mais j'aime bien cette solution avec vimdiff :
-
Sans rien installer, fonctionne sur un serveur classique :
find . -type f -not -exec diff -q {} ../autre_répertoire/{} \; -exec vimdiff {} ../autre_répertoire/{} \;
-not -exec diff
parce que diff retourne 1 si les fichiers sont différents et find n'enchaîne que s'il reçoit 0diff -q
parce qu'on ne veut pas afficher la différence, on veut juste savoir si les fichiers sont différents pour pouvoir enchaîner avec vimdiff- Ça ne compare que du répertoire courant vers une autre version. Pour voir les fichiers ajoutés dans cette version,
diff -r . ../autre_répertoire
-
Autre version sans vimdiff :
colordiff -r -y -W $(tput cols) . ../autre_répertoire/ | less -R
-r
pour récursif-y
pour afficher les différences côte à côte-W $(tput cols)
pour utiliser toute la largeur du terminal au lieu de la valeur par défaut de 130 caractèresless -R
pour afficher les caractères en couleur émis par colordiff- pour ignorer l'indentation, ajouter le paramètre
-w
à la commande diff - s'il n'y a pas colordiff, au pire il reste diff
- Si j'ai le temps d'installer une extension dans Vim, il existe vim-dirdiff.
-
Sur un PC avec interface graphique, on peut utiliser gvimdiff au lieu de vimdiff :
find . -type f -not -exec diff -q {} ../autre_répertoire/{} \; -ok gvimdiff {} ../autre_répertoire/{} \;
-ok
comme -exec mais demande confirmation, ce qui évite d'empiler plein de fenêtres parce que gvimdiff rend la main dès qu'il est lancé- en revanche il faut éviter -ok sur un serveur, sinon Vim crache une erreur "Input is not from a terminal" et le terminal est en vrac (faire reset)