Imagine que tu as deux versions d'un logiciel, ou d'un site web, et que tu n'as pas d'autre moyen de savoir ce qui a été modifié… Bien sûr, c'est plus facile et plus beau d'utiliser meld (par exemple) mais si on est sur un serveur… Bref, voilà comment faire avec juste des commandes dans un terminal.
find . -type f -ls -not -exec diff -q {} ../autre_répertoire/{} \; -ok vimdiff {} ../autre_répertoire/{} \;
Décortiquons :
.
on part du répertoire courant qui contient la version de référence-type f
on ne compare que des fichiers-ls
on affiche chaque fichier rencontré dans le répertoire courant-not -exec diff
parce que diff retourne 1 si les fichiers sont différents et find n'enchaîne avec l'argument suivant que s'il reçoit 0, donc on doit inverser avec -notdiff -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 le vimdiff{} ../autre_répertoire/{} \;
parce que {} représente le fichier courant trouvé par find et \; parce que find repère ainsi la fin d'une commande à exécuter-ok vimdiff
fait comme -exec vimdiff mais demande la confirmation avant d'exécuter vimdiff, ce qui permet de voir où on en est, ce qu'on s'apprête à voirNote 1 : ça marche très bien avec gvimdiff (la version graphique de Vim)
Note 2 : avec gvimdiff, le -ok
est indispensable parce que gvimdiff rend la main dès qu'il s'est lancé donc avec -exec on empile les fenêtres de gvimdiff pour chaque fichier différent et ça peut faire beaucoup !
Ce premier find ne compare que dans le sens "version de référence" vers "autre version", donc ça n'affichera pas si des fichiers ont été ajoutés dans "l'autre version". Pour voir les fichiers ajoutés dans cette autre version, il suffit de se mettre dans son répertoire et de faire :
find . -type f -exec ls ../répertoire_de_référence/{} \; > /dev/null
Pour chaque fichier ajouté, on verra
ls: impossible d'accéder à '../répertoire_de_référence/./bidule': Aucun fichier ou dossier de ce type