web-dev-qa-db-fra.com

Obtenir seulement la valeur de hachage en utilisant md5sum (sans nom de fichier)

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 'dépouiller' le nom du fichier et ne conserver que la valeur?

139
John Doe

Eh bien, une autre façon :)

md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
134
jyz

Une simple affectation de tableau fonctionne ... Notez que le premier élément d'un tableau bash peut être adressé uniquement par name sans l'indicateur [0], c'est-à-dire que $md5 ne contient que les 32 caractères du md5sum. 

md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
166
Peter.O

Vous pouvez utiliser cut pour fractionner la ligne sur les espaces et ne renvoyer que le premier champ de ce type:

md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)
46
Brian Campbell

Sur Mac OS X:

md5 -q file
22
trevor
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
13
Gordon Davisson

Une manière:

set -- $(md5sum $file)
md5=$1

Autrement:

md5=$(md5sum $file | while read sum file; do echo $sum; done)

Autrement:

md5=$(set -- $(md5sum $file); echo $1)

(N'essayez pas cela avec les tiques arrière à moins que vous ne soyez très courageux et très bon avec les antislashs.)

L'avantage de ces solutions par rapport à d'autres solutions est qu'elles n'invoquent que md5sum et le shell, plutôt que d'autres programmes tels que awk ou sed. Si cela compte vraiment est alors une question distincte; vous auriez probablement du mal à remarquer la différence.

5
Jonathan Leffler

Une autre façon est de faire:

md5sum filename |cut -f 1 -d " "

Cut divisera la ligne à chaque espace et retournera uniquement le premier champ.

3
azerttyu

Si vous avez besoin de l’imprimer et que vous n’avez pas besoin d’une nouvelle ligne, vous pouvez utiliser:

printf $(md5sum filename)
3
Alex
md5=$(md5sum < $file | tr -d ' -')
2
pixelbeat

md5sum met une barre oblique inverse avant un 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 d'une entrée standard (le nom du fichier sera simplement -), donc la réponse de pixelbeat fonctionnera, mais beaucoup d'autres nécessiteront l'ajout de quelque chose comme | tail -c 32.

0
Wojciech
md5=`md5sum ${my_iso_file} | cut -b-32`
0
letronje

Eh bien, j’ai eu le même problème aujourd’hui, mais j’ai essayé d’obtenir le fichier hash md5 en exécutant la commande find. J'ai eu la question la plus votée et l'ai enveloppée dans une fonction appelée md5 pour exécuter la commande find. La mission pour moi était de calculer le hachage pour tous les fichiers d’un dossier et de le générer sous la forme hash:filename.

md5() { md5sum $1 | awk '{ printf "%s",$1 }'; }
export -f md5
find -type f -exec bash -c 'md5 "$0"' {} \; -exec echo -n ':' \; -print

Donc, j'avais quelques morceaux d'ici et aussi de trouver -exec une fonction Shell?

0
Fabio Montefuscolo