Md5sumを使用して、ファイルのハッシュ値を生成します。しかし、ファイル名ではなく、ハッシュ値を受け取るだけです。
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
ファイル名を「削除」して値だけを残すにはどうすればよいですか?
まあ別の方法:)
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
単純な配列割り当てが機能します... bash
配列の最初の要素は、[0]
インデックスなしでname
だけでアドレス指定できることに注意してください。つまり、$md5
はmd5sumの32文字。
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
cut
を使用して、スペースで行を分割し、最初のそのようなフィールドのみを返すことができます。
md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)
Mac OS Xの場合:
md5 -q file
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
一方通行:
set -- $(md5sum $file)
md5=$1
別の方法:
md5=$(md5sum $file | while read sum file; do echo $sum; done)
別の方法:
md5=$(set -- $(md5sum $file); echo $1)
(あなたが非常に勇敢で、バックスラッシュが非常に得意でない限り、バックティックでそれを試さないでください。)
他のソリューションに対するこれらのソリューションの利点は、awk
やsed
などの他のプログラムではなく、md5sum
とシェルのみを呼び出すことです。それが実際に重要かどうかは、別の質問です。おそらく違いに気付くのは難しいでしょう。
別の方法は次のとおりです。
md5sum filename |cut -f 1 -d " "
切り取りは各スペースに行を分割し、最初のフィールドのみを返します。
印刷する必要があり、改行が必要ない場合は、次を使用できます。
printf $(md5sum filename)
md5=$(md5sum < $file | tr -d ' -')
md5sum
は、ファイル名にバックスラッシュがある場合、ハッシュの前にバックスラッシュを置きます。最初の32文字または最初のスペースの前にあるものは、適切なハッシュではない場合があります。標準入力を使用する場合は発生しません(ファイル名は-)ので、 pixelbeatの答え は機能しますが、他の多くは| tail -c 32
などを追加する必要があります。
md5=`md5sum ${my_iso_file} | cut -b-32`
さて、今日は同じ問題がありましたが、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?