Shell-Script
同時計算多個摘要(md5,sha256)?
假設磁碟 I/O 和空閒 RAM 是瓶頸(雖然 CPU 時間不是限制),是否存在可以一次計算多個消息摘要的工具?
我對計算大文件(以千兆字節為單位)的 MD-5 和 SHA-256 摘要特別感興趣,最好是並行計算。我試過
openssl dgst -sha256 -md5
了,但它只使用一種算法計算雜湊。預期行為的虛擬碼:
for each block: for each algorithm: hash_state[algorithm].update(block) for each algorithm: print algorithm, hash_state[algorithm].final_hash()
簽出
pee
("tee standard input to pipes
") 從moreutils
. 這基本上等同於 Marco 的tee
命令,但輸入起來更簡單一些。$ echo foo | pee md5sum sha256sum d3b07384d113edec49eaa6238ad5ff00 - b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c -
$ pee md5sum sha256sum <foo.iso f109ffd6612e36e0fc1597eda65e9cf0 - 469a38cb785f8d47a0f85f968feff0be1d6f9398e353496ff7aa9055725bc63e -
您可以使用
for
循環來遍歷各個文件,然後tee
結合使用程序替換(在 Bash 和 Zsh 等中工作)來管道到不同的校驗和。例子:
for file in *.mkv; do tee < "$file" >(sha256sum) | md5sum done
您還可以使用兩個以上的校驗和:
for file in *.mkv; do tee < "$file" >(sha256sum) >(sha384sum) | md5sum done
這樣做的缺點是校驗和不知道文件名,因為它是作為標準輸入傳遞的。如果這不可接受,您必須手動發出文件名。完整範例:
for file in *.mkv; do echo "$file" tee < "$file" >(sha256sum) >(sha384sum) | md5sum echo done > hashfilelist