J'utilise md5sum pour générer une valeur de hachage pour un fichier. Mais je n'ai besoin que de recevoir la valeur de hachage, pas le nom du fichier.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
Comment puis-je «supprimer» le nom du fichier et ne conserver que la valeur?
Réponses:
Eh bien une autre façon :)
la source
md5=`md5sum < ${my_iso_file}`
Cependant, cela génère toujours "-" à la fin. Mais pour les comparaisons, cela devrait suffire.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
et votre code revientMD5
.-
en ajoutant la| awk '{print $1}'
fin de votre code =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerUne simple affectation de tableau fonctionne ... Notez que le premier élément d'un
bash
tableau peut être adressé uniquement par lename
sans l'[0]
index, c'est-à-dire qu'il$md5
ne contient que les 32 caractères de la somme md5.la source
bash
, mais pouvez-vous me dire si le tableau est une fonctionnalité bash uniquement ou un standard de shell?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Elle devrait afficher68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
ça ne marche pas? Erreurs outbash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
2 mots shell vers stdout :acbd18db4cc2f85cedef654fccc4a4d8
et-
(le-
indique la source comme stdin ). - Vous devez dire bash pour capturer ces mots dans une chaîne, en utilisant commande Remplacement :$( command )
. - Les(
crochets)
produisent un tableau bash avec 2 éléments. Cependant, vous devez affecter cette construction de tableau( … )
à un nom de variable; par conséquent, en utilisant md5 comme le nom du tableau:md5=($(echo -n foo | md5sum))
. Vous n'avez pas assigné le tableau à un nom de variableVous pouvez utiliser
cut
pour diviser la ligne sur des espaces et renvoyer uniquement le premier de ces champs:la source
cut -c 1-32
md5sum
->sha256sum
sans vous souvenir de la quantité de caractères à "couper".Sur Mac OS X:
la source
gmd5sum
partir decoreutils
fonctionnerait sur MacOS commemd5sum
dans d'autres réponses mentionnées ici.la source
$()
(bien qu'elles ne fassent aucun mal), mais vous en avez certainement besoin${}
.Une manière:
Autrement:
Autrement:
(N'essayez pas cela avec des contre-obliques, sauf si vous êtes très courageux et très bon avec des contre-obliques.)
L'avantage de ces solutions par rapport aux autres solutions est qu'elles invoquent uniquement
md5sum
et le shell, plutôt que d'autres programmes tels queawk
oused
. La question de savoir si cela compte réellement est alors une question distincte; vous auriez probablement du mal à remarquer la différence.la source
Une autre façon est de faire:
Couper divisera la ligne dans chaque espace et ne retournera que le premier champ.
la source
la source
Si vous avez besoin de l'imprimer et n'avez pas besoin d'une nouvelle ligne, vous pouvez utiliser:
la source
la source
md5sum
met une barre oblique inverse avant le hachage s'il y a une barre oblique inverse dans le nom du fichier. Les 32 premiers caractères ou quoi que ce soit avant le premier espace peuvent ne pas être un hachage approprié. Cela ne se produira pas lors de l'utilisation de l'entrée standard (le nom du fichier sera juste -), donc la réponse de pixelbeat fonctionnera, mais beaucoup d'autres nécessiteront l'ajout de quelque chose comme| tail -c 32
.la source
Eh bien, j'ai eu le même problème aujourd'hui, mais en essayant d'obtenir le hachage du fichier md5 lors de l'exécution de la
find
commande. J'ai reçu la question la plus votée et l'ai enveloppée dans une fonction appeléemd5
à s'exécuter dans la commande find. La mission pour moi était de calculer le hachage pour tous les fichiers d'un dossier et de le sortir commehash:filename
.Donc, j'avais quelques morceaux d'ici et aussi de find -exec une fonction shell?
la source
Par souci d'exhaustivité, utilisez sed en utilisant regex et capture group:
L'expression regulare capture tout dans un groupe jusqu'à ce qu'un espace soit atteint. Pour que le groupe de capture fonctionne, vous devez tout capturer dans sed. (En savoir plus sur les groupes sed et caputer ici: https://stackoverflow.com/a/2778096/10926293 )
En tant que délimiteur dans sed, j'utilise des deux-points car ils ne sont pas valides dans les chemins de fichiers et je n'ai pas à échapper au slashed dans le chemin du fichier.
la source
Autrement:
la source
la source