Une bonne façon de faire cette comparaison est d'utiliser find
con md5sum
alors a diff
.
Exemple
Utilisez find pour lister tous les fichiers dans le répertoire, puis calculez le hachage md5 pour chaque fichier et envoyez-le trié par nom de fichier dans un fichier :
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
Faites la même procédure pour l'autre répertoire :
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
Comparez ensuite les deux fichiers obtenus avec diff
:
diff -u dir1.txt dir2.txt
Ou comme une commande unique utilisant la substitution de processus :
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
Si vous voulez voir seulement les changements :
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
La commande cut n'imprime que le hash (premier champ) à comparer par diff. Sinon, diff imprimera chaque ligne, car les chemins des répertoires diffèrent même si le hachage est le même.
Mais vous ne saurez pas quel fichier a changé...
Pour cela, vous pouvez essayer quelque chose comme
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
Cette stratégie est très utile lorsque les deux répertoires à comparer ne se trouvent pas sur la même machine et que vous devez vous assurer que les fichiers sont identiques dans les deux répertoires.
Une autre bonne façon de faire le travail est d'utiliser la méthode de Git. diff
(peut causer des problèmes lorsque les fichiers ont des permissions différentes -> chaque fichier est alors listé dans la sortie) :
git diff --no-index dir1/ dir2/