modifier pour la correction et la clarté des options - j'ai oublié '--brief'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
et ajoutez d'autres options au goût, selon ce que vous comparez:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs lira chaque octet de l'original et des fichiers de copie et de rapport qui sont identiques.
Le format de sortie diff est défini par POSIX, il est donc assez portable. Vous voudrez peut-être ajouter quelque chose comme:
| tee diff-out.1 | grep -v -Ee 'Les fichiers. * et. * sont identiques'
Vous pouvez utiliser des chksums ou des hachages, mais vous devez ensuite les synchroniser avec les arborescences de fichiers, de sorte que vous devriez de nouveau lire chaque octet de chaque fichier.
EDIT - trop long pour être un commentaire, en réponse à:
les fichiers de plus de 10 Go ne vérifient pas
Vous voudrez peut-être essayer cette option diff: --speed-large-files
Il est possible que le diff que vous utilisez ne gère pas bien les fichiers très volumineux (plus gros que la mémoire système, par exemple), et signale donc des différences entre les fichiers qui sont en fait les mêmes.
J'avais pensé qu'il y avait une option -h ou un 'bdiff' qui faisait mieux sur les gros fichiers, mais je n'en trouve pas dans Fedora. Je crois que les options --speed-large-files sont un successeur à une option de comparaison "-h" ".
Une approche différente serait de répéter la commande rsync que vous avez utilisée, avec '-vin' (verbose, itemize, no_run). Cela signalerait toute différence trouvée par rsync - et il ne devrait pas y en avoir.
Pour déplacer certains fichiers, vous regardez un script quelque chose comme:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
mais je ne recommande pas de faire ça. La question sous-jacente est "comment puis-je être sûr que rsync a correctement copié une hiérarchie de fichiers?" et si vous pouvez vous démontrer que rsync fonctionne bien, avec diff ou un autre outil, alors vous pouvez simplement compter sur rsync, plutôt que de le contourner.
rsync -vin compare en fonction des autres options que vous lui donnez. Je pensais que la valeur par défaut était la somme de contrôle, mais vous avez raison, -c ou --checksum est requis pour cela.
L'utilitaire diff est vraiment destiné aux fichiers de lignes de texte, mais il devrait signaler des sous-s «identiques» pour les fichiers binaires.
Le --brief devrait supprimer toute sortie de contenu de fichier - mes excuses pour l'avoir ignoré plus tôt - il a été semi-enterré dans un script laid.