Calculer la somme de contrôle MD5 d'un répertoire

29

Je cherche un moyen rapide de comparer le contenu du répertoire. Est-il possible de faire une somme md5 (ou une somme de contrôle équivalente) d'un répertoire entier?

Utiliser Ubuntu Linux

poisson-globe
la source
Vous pouvez également envisager d'utiliser diff pour comparer des répertoires qui vous montreront réellement où les répertoires diffèrent. unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee
@Kibbee Pour éviter cela, vous devez prendre en compte autre chose que le contenu des données de chaque fichier et exactement comment vous contrôlez les fichiers. Éléments fournis : [sommes de contrôle] 1. A (répertoire) - fichier1 [ABC] - fichier2 [CBA] 2. B (répertoire) - fichier1 [ABC] - B1 (répertoire) - fichier2 [CBA] 3. C (répertoire) - fichier4 [ABC] - File5 [CBA] 4. D (Directory) - Copie File1 [ABC] - File2 copy [CBA] Les répertoires A et B ne sont pas identiques bien qu'ils contiennent les mêmes fichiers (bien qu'en B1 , File2 se trouve dans un sous-répertoire) . Dans votre exemple, A et C seraient considérés comme identiques car
Jacob Lyles

Réponses:

36

Sûr - md5sum directory/*

Si vous avez besoin de quelque chose d'un peu plus flexible (par exemple, pour la récursivité des répertoires ou la comparaison de hachage), essayez md5deep.

apt-get install md5deep
md5deep -r directory

Pour comparer une structure de répertoires, vous pouvez lui donner une liste de hachages à comparer:

md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2

Cela générera tous les fichiers du répertoire2 qui ne correspondent pas au répertoire1.

Cela n'affichera pas les fichiers qui ont été supprimés du répertoire1 ou les fichiers qui ont été ajoutés au répertoire2.

Shane Madden
la source
Pas ce que je voulais dire, mais ce que je voulais :) Je voulais dire récursivement, et obtenir UN hachage à la fin, mais je pense que cela peut être fait avec md5deep -l et hacher la sortie elle-même.
pufferfish
1
L'ordre de hachage n'est pas cohérent, il faudrait donc trier la sortie avant le hachage
pufferfish
1
Pour obtenir un ordre déterministe, utilisez -j0ce qui désactive le multithreading (voir la page de manuel).
Johann
1
@ ShaneMadden ♦ J'ai installé md5deepavec sudo apt-get install md5deepsur Ubuntu 16.04mais quand j'ai essayé de lire la page de manuel , il me dit que> Pas de saisie manuelle pour md5deep
Kasun Siyambalapitiya
27

Si vous souhaitez voir ce qui est différent (le cas échéant) entre deux répertoires, rsync serait un bon choix.

rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory

Cela répertorie tous les fichiers différents.

JakePaulus
la source
2
diff -qr /source/directory/ /destination/directory/afficherait également des fichiers différents.
Konerak
Existe-t-il un moyen d'effectuer une comparaison au niveau du bit au lieu de sommes de contrôle? Cela pourrait être plus rapide sur les disques locaux.
Ali
Très agréable. Fonctionne si la source ou la destination sont également des dossiers distants, par exempleusername@hostname:/destination/directory
Thalis K.
11

je pense que j'ai répondu à celui-ci avant avec cette réponse:

find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum

donne: b1a5b654afee985d5daccd42d41e19b2877d66b1

L'idée est de hacher tous les fichiers, de couper les hachages un par ligne, de les trier et de hacher ce qui donne un seul hachage. cela ne dépend pas du nom des fichiers.

Dan D.
la source
5

L' application cfv est très utile, non seulement elle peut vérifier et créer des sommes de contrôle MD5, mais elle peut également faire CRC32, sha1, torrent, par, par2.

pour créer un fichier de somme de contrôle CRC32 pour tous les fichiers du répertoire actuel:

cfv -C

pour créer un fichier de somme de contrôle MD5 pour tous les fichiers du répertoire actuel:

cfv -C -t md5 -f "répertoire courant.md5sums"

Pour créer un fichier de somme de contrôle distinct pour chaque sous-répertoire:

cfv -C -r

Pour créer un "super" fichier de somme de contrôle contenant des fichiers dans tous les sous-répertoires:

cfv -C -rr
Hubert Kario
la source
4

J'ai utilisé hashdeep, comme expliqué dans cette réponse askubuntu: Vérifiez l'exactitude des fichiers copiés :

Pour calculer les sommes de contrôle:

 $ cd <directory1>
 $ hashdeep -rlc md5 . > ~/hashOutput.txt

Pour vérifier et répertorier les différences:

 $ cd <directory2>
 $ hashdeep -ravvl -k ~/hashOutput.txt .
 hashdeep: Audit passed
    Input files examined: 0
   Known files expecting: 0
           Files matched: 13770
 Files partially matched: 0
             Files moved: 0
         New files found: 0
   Known files not found: 0

Cela a un avantage sur md5deep en ce qu'il montrera les fichiers renommés (déplacés), ajoutés et supprimés, ainsi que d'éviter le problème avec les fichiers de longueur 0 indiqué au bas de http://www.meridiandiscovery.com/how- à / validating-copy-results-using-md5deep .

Argyle
la source
3

Cela a fonctionné pour moi: (exécutez-le dans le répertoire qui vous intéresse)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum
pantalon de chat
la source
1

Vous pouvez créer des sommes MD5 pour chaque fichier, les classer par ordre alphabétique et les avoir (avec ou sans retour à la ligne). Étant donné que MD5 est cryptographique, il devrait fonctionner correctement avec des hachages de hachages.

Il devrait y avoir un certain ordre dans les choses, sinon vous obtiendrez des résultats différents pour des dires égaux.

Et vous devriez considérer que l' ajout d'un certain fichier à un répertoire va complètement changer le résultat, même si elle était juste un .directoryde .DS_Storefichier.

Martin Ueding
la source
Techniquement, on pourrait obtenir le même hachage pour différents répertoires. Si dir A avait 2 fichiers avec le contenu 'ab' et 'c' et dir B avait 2 fichiers avec le contenu 'a' et 'bc' alors le hachage uniquement les données dans les fichiers donnerait les mêmes résultats, même s'ils ont des fichiers avec contenu différent. Je ne sais même pas comment on définirait le MD5Sum d'un répertoire.
Kibbee
1

Dans un cas spécifique, disons que vous souhaitez copier certains fichiers du répertoire1 vers le répertoire2, puis vous souhaitez vérifier une copie réussie à l'aide d'une comparaison md5.

Première. cd dans directory1 et tapez:

find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt

ce qui créera un fichier de référence contenant une somme md5 pour chaque fichier du répertoire1. Une fois cela fait, il vous suffit de cd dans le répertoire2 et de taper:

md5sum -c ~/Desktop/md5sum.txt

Le programme md5sum récupère chaque chemin du fichier md5sum.txt, calcule la somme md5 de ce fichier dans le dossier de destination, puis la compare avec la somme qu'il a stockée dans le fichier.

Une fois le processus terminé, vous obtiendrez un récapitulatif tel que «Si et tant de fichiers ne correspondent pas» ou quelque chose comme ça.

Joel
la source
1

J'ai eu besoin de vérifier l'intégrité des sauvegardes / miroirs qui contiennent un grand nombre de fichiers et j'ai fini par écrire un programme en ligne de commande appelé MassHash. C'est écrit en Python. Un lanceur GTK + est également disponible. Tu voudras peut-être vérifier...

http://code.google.com/p/masshash/

Jonathan
la source