it-swarm.com.de

Hashwert nur mit md5sum (ohne Dateinamen) abrufen

Ich verwende md5sum, um einen Hash-Wert für eine Datei zu generieren .. __ Ich brauche nur den Hash-Wert und nicht den Dateinamen.

md5=`md5sum ${my_iso_file}`
echo ${md5}

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

Wie kann ich den Dateinamen "entfernen" und nur den Wert behalten?

139
John Doe

Naja, ein anderer Weg :)

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

Eine einfache Arrayzuweisung funktioniert ... Beachten Sie, dass das erste Element eines bash-Arrays nur von der name ohne den [0]-Index angesprochen werden kann, dh $md5 enthält nur die 32 Zeichen der md5sum. 

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

Sie können cut verwenden, um die Zeile in Leerzeichen aufzuteilen und nur das erste derartige Feld zurückzugeben:

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

Unter 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

Einweg:

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

Ein anderer Weg:

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

Ein anderer Weg:

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

(Versuchen Sie es nicht mit Back-Ticks, es sei denn, Sie sind sehr mutig und sehr gut mit Backslashes.)

Der Vorteil dieser Lösungen gegenüber anderen Lösungen besteht darin, dass sie statt awk oder sed nur md5sum und die Shell aufrufen. Ob das wirklich zählt, ist eine andere Frage. Sie würden wahrscheinlich den Druck kaum bemerken.

5

Ein anderer Weg ist zu tun:

md5sum filename |cut -f 1 -d " "

Beim Ausschneiden wird die Linie in jedes Leerzeichen aufgeteilt und nur das erste Feld zurückgegeben.

3
azerttyu

Wenn Sie es drucken müssen und keinen Zeilenumbruch benötigen, können Sie Folgendes verwenden:

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

md5sum setzt den Backslash vor dem Hash, wenn der Dateiname einen Backslash enthält. Die ersten 32 Zeichen oder etwas vor dem ersten Leerzeichen sind möglicherweise kein richtiger Hash. Bei der Standardeingabe ist dies nicht der Fall (Dateiname ist nur -), so dass die Antwort von pixelbeat funktioniert, aber viele andere müssen etwas wie | tail -c 32 hinzufügen.

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

Nun, ich hatte heute das gleiche Problem, versuchte jedoch beim Ausführen des Befehls find den Hash der Datei md5 abzurufen. Ich bekam die am meisten gewählte Frage und wickelte sie in eine Funktion namens md5 ein, um sie im Suchbefehl auszuführen. Die Mission für mich bestand darin, Hash für alle Dateien in einem Ordner zu berechnen und als hash:filename auszugeben.

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

Ich hatte also ein paar Stücke von hier und auch von finde -exec eine Shell-Funktion?

0