web-dev-qa-db-ja.com

md5sumを使用してのみ(ファイル名なしで)ハッシュ値を取得します

Md5sumを使用して、ファイルのハッシュ値を生成します。しかし、ファイル名ではなく、ハッシュ値を受け取るだけです。

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

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

ファイル名を「削除」して値だけを残すにはどうすればよいですか?

155
John Doe

まあ別の方法:)

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

単純な配列割り当てが機能します... bash配列の最初の要素は、[0]インデックスなしでnameだけでアドレス指定できることに注意してください。つまり、$md5はmd5sumの32文字。

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

cut を使用して、スペースで行を分割し、最初のそのようなフィールドのみを返すことができます。

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

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}"
14
Gordon Davisson

一方通行:

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

別の方法:

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

別の方法:

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

(あなたが非常に勇敢で、バックスラッシュが非常に得意でない限り、バックティックでそれを試さないでください。)

他のソリューションに対するこれらのソリューションの利点は、awksedなどの他のプログラムではなく、md5sumとシェルのみを呼び出すことです。それが実際に重要かどうかは、別の質問です。おそらく違いに気付くのは難しいでしょう。

5

別の方法は次のとおりです。

md5sum filename |cut -f 1 -d " "

切り取りは各スペースに行を分割し、最初のフィールドのみを返します。

3
azerttyu

印刷する必要があり、改行が必要ない場合は、次を使用できます。

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

md5sumは、ファイル名にバックスラッシュがある場合、ハッシュの前にバックスラッシュを置きます。最初の32文字または最初のスペースの前にあるものは、適切なハッシュではない場合があります。標準入力を使用する場合は発生しません(ファイル名は-)ので、 pixelbeatの答え は機能しますが、他の多くは| tail -c 32などを追加する必要があります。

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

さて、今日は同じ問題がありましたが、findコマンドの実行時にファイルmd5ハッシュを取得しようとしました。最も投票された質問を取得し、md5という関数でラップして、findコマンドで実行しました。私の使命は、フォルダー内のすべてのファイルのハッシュを計算し、hash:filenameとして出力することでした。

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

だから、私はここからと シェル関数を見つける-exec?

0