md5sumを使用して、ファイルのハッシュ値を生成します。しかし、ファイル名ではなく、ハッシュ値を受け取るだけで済みます。
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
ファイル名を「ストリップ」して値だけを残すにはどうすればよいですか?
md5sumを使用して、ファイルのハッシュ値を生成します。しかし、ファイル名ではなく、ハッシュ値を受け取るだけで済みます。
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
ファイル名を「ストリップ」して値だけを残すにはどうすればよいですか?
回答:
まあ別の方法:)
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
md5=`md5sum < ${my_iso_file}`
ただし、これでも最後に「-」が出力されます。しかし、比較にはこれで十分です。
MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
と、Macで次の出力が表示され、コードが返されますMD5
。
-
追加することで実行でき| awk '{print $1}'
ます=> md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyer
単純な配列割り当てが機能します...配列の最初の要素は、インデックスなしでbash
によってアドレス指定できることに注意してください。つまり、md5sumの32文字のみが含まれています。 name
[0]
$md5
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
bash
いますが、配列がbashのみの機能なのか、シェル標準なのかを教えていただけますか?
echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
-出力されるはずです68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
仕事はないのでしょうか?エラーが発生 bash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
2つのシェルワードをstdout:に出力します(acbd18db4cc2f85cedef654fccc4a4d8
およびは、ソースをstdinとして示します)。-あなたは言う必要がありますbashのものをキャプチャするために言葉を使用して、文字列にコマンド置換を:。– ブラケットは、2つの要素を持つbash配列を生成します。ただし、その配列構成を変数名に割り当てる必要があります。したがって、配列名としてmd5を使用します。配列を変数名に割り当てていません-
-
$( command )
(
)
( … )
md5=($(echo -n foo | md5sum))
を使用cut
して行をスペースで分割し、最初のそのようなフィールドのみを返すことができます。
md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)
cut -c 1-32
md5sum
-> sha256sum
「カット」する必要のある文字数を覚えていない。
Mac OS Xの場合:
md5 -q file
gmd5sum
、ここで説明した他の回答とcoreutils
同様にmd5sum
、MacOSでも動作します。
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
です。それが実際に重要かどうかは、別の質問です。あなたはおそらく違いに気づくのが難しいでしょう。
md5sum
ファイル名にバックスラッシュがある場合、ハッシュの前にバックスラッシュを置きます。最初の32文字または最初のスペースの前の何かは、適切なハッシュではない可能性があります。標準入力(ファイル名は-のみ)を使用する場合は発生しないため、pixelbeatの回答は機能しますが、他の多くはのようなものを追加する必要があり| tail -c 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
だから、私はここから、そしてfind -execシェル関数からいくつかの断片を手に入れましたか?
完全を期すために、正規表現とキャプチャグループを使用したsedの方法:
md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')
正規表現は、スペースに到達するまで、グループ内のすべてをキャプチャしています。キャプチャグループを機能させるには、sedのすべてをキャプチャする必要があります。(ここでsedおよびcaputerグループの詳細:https ://stackoverflow.com/a/2778096/10926293 )
sedの区切り文字としてコロンを使用します。コロンはファイルパスでは無効であり、スラッシュでエスケープする必要がないためです。ファイルパス。
md5=$(md5sum < index.html | head -c -4)