md5sumを使用して、ファイルのハッシュ値を生成します。ただし、ファイル名ではなく、ハッシュ値を受け取るだけで済みます。
md5=`md5sum ${my_iso_file}`
echo ${md5}
出力:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
ファイル名を「削除」して値のみを保持するにはどうすればよいですか?
単純な配列割り当てが機能します... Bash 配列の最初の要素は、インデックスname
なしでアドレス指定できることに注意してください。つまり、 md5sumの 32 文字のみが含まれます。[0]
$md5
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
AWK の使用:
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
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)
(非常に勇気があり、バックスラッシュが得意でない限り、バッククォートを使用しないでください。)
他のソリューションに対するこれらのソリューションの利点は、またはmd5sum
などの他のプログラムではなく、 およびシェルのみを呼び出すことです。それが実際に重要かどうかは別の問題です。おそらく違いに気付くのは難しいでしょう。awk
sed
印刷する必要があり、改行が必要ない場合は、次を使用できます。
printf $(md5sum filename)
md5=$(md5sum < $file | tr -d ' -')
md5=`md5sum ${my_iso_file} | cut -b-32`
md5sum
ファイル名にバックスラッシュがある場合、ハッシュの前にバックスラッシュを置きます。最初の 32 文字または最初のスペースより前の文字は、適切なハッシュではない可能性があります。
標準入力-
を使用している場合は発生しない (ファイル名は.| tail -c 32
完全を期すために、正規表現とキャプチャ グループを使用した sed の方法:
md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')
正規表現は、スペースに到達するまでグループ内のすべてをキャプチャしています。キャプチャ グループを機能させるには、すべてを sed にキャプチャする必要があります。
(sed とキャプチャ グループの詳細については、こちら: sed でキャプチャされたグループのみを出力するにはどうすればよいですか? )
sed の区切り文字として、ファイル パスでは有効ではなく、ファイル パスのスラッシュをエスケープする必要がないため、コロンを使用します。
別の方法:
md5=$(md5sum ${my_iso_file} | sed '/ .*//' )
md5=$(md5sum < index.html | head -c -4)