Il doit sûrement y avoir un moyen de le faire facilement!
J'ai essayé les applications de ligne de commande Linux telles que sha1sum
et, md5sum
mais elles ne semblent pouvoir calculer que les hachages de fichiers individuels et afficher une liste de valeurs de hachage, une pour chaque fichier.
J'ai besoin de générer un seul hachage pour tout le contenu d'un dossier (pas seulement les noms de fichiers).
J'aimerais faire quelque chose comme
sha1sum /folder/of/stuff > singlehashvalue
Edit: pour clarifier, mes fichiers sont à plusieurs niveaux dans une arborescence de répertoires, ils ne sont pas tous assis dans le même dossier racine.
Réponses:
Une solution possible serait:
S'il existe toute une arborescence de répertoires, il vaut probablement mieux utiliser find et xargs. Une commande possible serait
Et, enfin, si vous devez également tenir compte des permissions et des répertoires vides:
Les arguments de le
stat
feront afficher le nom du fichier, suivi de ses autorisations octales. Les deux recherches s'exécuteront l'une après l'autre, provoquant le double de la quantité d'E / S disque, la première trouvant tous les noms de fichiers et la somme de contrôle du contenu, la seconde trouvant tous les noms de fichiers et de répertoires, imprimant le nom et le mode. La liste des "noms de fichiers et sommes de contrôle", suivie de "noms et répertoires, avec permissions" sera alors additionnée, pour une somme de contrôle plus petite.la source
find ./folder -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum
/
sur lepath/to/folder
bit.Utilisez un outil de détection d'intrusion dans le système de fichiers comme l' aide .
hacher une boule tar du répertoire:
tar cvf - /path/to/folder | sha1sum
Codez quelque chose vous-même, comme oneliner de vatine :
find /path/to/folder -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum
la source
git config --local core.fileMode false
avant de vous engager pour éviter cela. Je ne sais pas s'il y a d'autres mises en garde comme celle-ci.Tu peux faire
tar -c /path/to/folder | sha1sum
la source
--mtime
option comme si:tar -c /path/to/folder --mtime="1970-01-01" | sha1sum
.Si vous voulez juste vérifier si quelque chose dans le dossier a changé, je vous recommande celui-ci:
Il vous donnera simplement un hachage de la sortie ls, qui contient les dossiers, les sous-dossiers, leurs fichiers, leur horodatage, leur taille et leurs autorisations. À peu près tout ce dont vous auriez besoin pour déterminer si quelque chose a changé.
Veuillez noter que cette commande ne générera pas de hachage pour chaque fichier, mais c'est pourquoi elle devrait être plus rapide que d'utiliser find.
la source
Une approche robuste et propre
C'est ce que j'ai sur la tête, quiconque a passé du temps à travailler là-dessus aurait pratiquement attrapé d'autres pièges et cas de coin.
Voici un outil , très léger sur la mémoire, qui traite la plupart des cas, peut être un peu rugueux sur les bords mais a été très utile.
Un exemple d'utilisation et de sortie de
dtreetrawl
.Un extrait de sortie conviviale:
la source
Si vous souhaitez simplement hacher le contenu des fichiers, en ignorant les noms de fichiers, vous pouvez utiliser
Assurez-vous que les fichiers sont dans le même ordre lors du calcul du hachage:
Mais vous ne pouvez pas avoir de répertoires dans votre liste de fichiers.
la source
Un autre outil pour y parvenir:
http://md5deep.sourceforge.net/
Tel quel: comme md5sum mais aussi récursif, ainsi que d'autres fonctionnalités.
la source
S'il s'agit d'un référentiel git et que vous souhaitez ignorer tous les fichiers
.gitignore
, vous pouvez utiliser ceci:Cela fonctionne bien pour moi.
la source
Il existe un script python pour cela:
http://code.activestate.com/recipes/576973-getting-the-sha-1-or-md5-hash-of-a-directory/
Si vous modifiez les noms d'un fichier sans changer leur ordre alphabétique, le script de hachage ne le détectera pas. Mais, si vous modifiez l'ordre des fichiers ou le contenu d'un fichier, l'exécution du script vous donnera un hachage différent de celui d'avant.
la source
Essayez de le faire en deux étapes:
Ainsi:
Ou faites tout cela en même temps:
la source
for F in 'find ...' ...
ne fonctionne pas lorsque vous avez des espaces dans les noms (ce que vous faites toujours de nos jours).Je dirigerais les résultats pour les fichiers individuels à travers
sort
(pour éviter une simple réorganisation des fichiers pour changer le hachage) dansmd5sum
ousha1sum
, selon votre choix.la source
J'ai écrit un script Groovy pour faire ceci:
Vous pouvez personnaliser l'utilisation pour éviter d'imprimer chaque fichier, modifier le résumé du message, supprimer le hachage de répertoire, etc. Je l'ai testé par rapport aux données de test NIST et cela fonctionne comme prévu. http://www.nsrl.nist.gov/testdata/
la source
J'ai dû vérifier dans un répertoire entier pour les changements de fichiers.
Mais avec l'exclusion, les horodatages, la propriété des répertoires.
Le but est d'obtenir une somme identique n'importe où, si les fichiers sont identiques.
Y compris hébergé dans d'autres machines, indépendamment de tout sauf des fichiers, ou d'une modification de ceux-ci.
Il génère une liste de hachage par fichier, puis concatène ces hachages en un seul.
C'est bien plus rapide que la méthode tar.
Pour une plus grande confidentialité dans nos hachages, nous pouvons utiliser sha512sum sur la même recette.
Les hachages sont également identiques partout en utilisant sha512sum mais il n'y a aucun moyen connu de l'inverser.
la source
sha256sum /tmp/thd-agent/* | sort
est ce que j'essaye pour une commande fiable, puis juste hacher cela.ls -r | sha256sum
?Vous pouvez
sha1sum
générer la liste des valeurs de hachage, puis àsha1sum
nouveau cette liste, cela dépend exactement de ce que vous voulez accomplir.la source
Voici une variante simple et courte de Python 3 qui fonctionne bien pour les fichiers de petite taille (par exemple, une arborescence source ou quelque chose, où chaque fichier individuellement peut facilement s'intégrer dans la RAM), en ignorant les répertoires vides, en fonction des idées des autres solutions:
Cela fonctionne comme ceci:
Vous pouvez passer une fonction de hachage différente comme deuxième paramètre si SHA-1 n'est pas votre tasse de thé.
la source