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?
Eh bien, une autre façon :)
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
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
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)
Sur Mac OS X:
md5 -q file
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
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.
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.
Si vous avez besoin de l’imprimer et que vous n’avez pas besoin d’une nouvelle ligne, vous pouvez utiliser:
printf $(md5sum filename)
md5=$(md5sum < $file | tr -d ' -')
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
.
md5=`md5sum ${my_iso_file} | cut -b-32`
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?