MISE À JOUR: Cela fait quelques années que je n'ai pas posté cette réponse et en attendant j'ai réécrit et amélioré le script que j'ai présenté ici plusieurs fois. J'ai décidé de republier le nouveau script comme une toute nouvelle réponse. Je le recommande vivement par rapport à celui-ci.
INTRODUCTION
J'ai observé que l'ordre dans lequel la commande find génère les éléments trouvés dans un répertoire varie au sein de répertoires identiques sur différentes partitions. Si vous comparez les hachages du même répertoire, vous n'avez pas à vous en soucier, mais si vous obtenez les hachages pour vous assurer qu'aucun fichier n'a été manqué ou corrompu lors d'une copie, vous devez inclure une ligne supplémentaire pour trier le contenu du répertoire et ses éléments. Par exemple, la réponse de Matthew Bohnsack est assez élégante:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
Mais si vous l'utilisez pour comparer un répertoire copié à son original, vous enverriez la sortie dans un fichier txt que vous compareriez à la liste sortie de l'autre répertoire en utilisant Kompare ou WinMerge ou en obtenant simplement les hachages de chaque lis . Le fait est que l'ordre dans lequel l'outil de recherche affichera le contenu peut varier d'un répertoire à l'autre, Kompare signalera de nombreuses différences car les hachages n'ont pas été calculés dans le même ordre. Pas un gros problème pour les petits répertoires mais assez ennuyeux si vous traitez avec 30000 fichiers. Par conséquent, vous devez effectuer les étapes supplémentaires de tri de la sortie pour faciliter la comparaison des listes de hachage entre les deux répertoires.
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum > sha1sum_list_unsorted.txt
sort sha1sum_list_unsorted.txt > sha1sum_list_sorted.txt
Cela trierait la sortie afin que les fichiers avec le même hachage soient sur les mêmes lignes lors de l'exécution du programme de différenciation (à condition qu'aucun fichier ne manque dans le nouveau répertoire).
ET SUR LE SCRIPT ...
Voici un script que j'ai écrit. Il fait la même chose que la réponse find / xarg, mais il triera les fichiers avant d'obtenir le sha1sum (en les conservant dans le même répertoire). La première ligne du script recherche récursivement tous les fichiers du répertoire. Le suivant trie les résultats par ordre alphabétique. Les deux suivants prennent le contenu trié et ajoutent un sha1sum et des guillemets aux fichiers de la liste triée, créant un gros script shell qui calcule chaque hachage de fichiers, un à la fois et le génère dans content_sha1sum.txt.
#!/bin/bash
find . -type f > content.txt
sort content.txt > content_sorted.txt
awk '{print "sha1sum \""$0}' content_sorted.txt > temp.txt
awk '{print $0"\""}' temp.txt > get_sha1.sh
chmod +x get_sha1.sh
./get_sha1.sh > content_sha1sum.txt
rm content.txt
rm content_sorted.txt
rm temp.txt
rm get_sha1.sh
xdg-open content_sha1sum.txt
J'espère que cela t'aides.