Un bon moyen de faire cette comparaison est d'utiliser find
avec md5sum
, alors a diff
.
Exemple
Utilisez find pour répertorier tous les fichiers du répertoire, puis calculez le hachage md5 pour chaque fichier et dirigez-le trié par nom de fichier vers un fichier:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
Effectuez la même procédure dans un autre répertoire:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
Comparez ensuite le résultat avec deux fichiers diff
:
diff -u dir1.txt dir2.txt
Ou en tant que 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 uniquement les modifications:
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 hachage (premier champ) à comparer par diff. Dans le cas contraire, diff imprimera chaque ligne car les chemins de répertoire diffèrent même lorsque le hachage est identique.
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 le même ordinateur et que vous devez vous assurer que les fichiers sont égaux dans les deux répertoires.
Un autre bon moyen de faire le travail est d'utiliser la diff
commande de Git (peut causer des problèmes lorsque les fichiers ont des autorisations différentes -> chaque fichier est alors répertorié dans la sortie):
git diff --no-index dir1/ dir2/
bash --version
?