Bash 为文件(或文件集)生成base64编码的SHA512摘要

Bash 为文件(或文件集)生成base64编码的SHA512摘要,bash,openssl,base64,sha512,blackberry-playbook,Bash,Openssl,Base64,Sha512,Blackberry Playbook,构建工具生成一个包含文件的归档文件和一个MANIFEST.MF,其中包含每个文件的条目和一个base64编码的SHA512摘要。但是,存在一个缺陷,即构建中的文件过多会导致构建失败。我正在试图找出如何生成相同的信息 下面的示例来自MANIFEST.MF,它包含文件名和摘要。但是,base64变体使用\uuu代替/和-代替+,并且没有用于填充的尾随= Archive-Asset-Name: air/XX/IMG_0999.jpg Archive-Asset-SHA-512-Digest: YI_K

构建工具生成一个包含文件的归档文件和一个MANIFEST.MF,其中包含每个文件的条目和一个base64编码的SHA512摘要。但是,存在一个缺陷,即构建中的文件过多会导致构建失败。我正在试图找出如何生成相同的信息

下面的示例来自
MANIFEST.MF
,它包含文件名和摘要。但是,base64变体使用
\uuu
代替
/
-
代替
+
,并且没有用于填充的尾随
=

Archive-Asset-Name: air/XX/IMG_0999.jpg
Archive-Asset-SHA-512-Digest: YI_KXWjpJwwsi5MDQPeBQc9SVi-bH6zYq5PgBD3jQiqHu-r-5Hv8A0yh_y5j2T9MpYZ5TVMW4JXHSXNYmpV1tA
我运行Windows7,但安装了GIT,所以我将MINGW32作为bash shell。我发现了openssl和tr命令的管道组合,但似乎有点混乱

openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr '+' '-' | tr '/' '_' | tr -d '=' | tr -d '\n'
是否有更好的方法生成此摘要


最后,我将不得不处理目录树中的所有图像。我希望有一个脚本解决方案,而不是编写一个程序。第二个问题是如何(递归地)为目录中的所有文件生成清单语法。这是包含上述命令的bashshell脚本吗?由于我以前没有写过shell脚本,所以这里的任何提示都值得欣赏。

您可以通过结合以下内容来缩短您的命令:

openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr '+/' '-_' | tr -d '=\n'
对于树中的所有文件,类似于:

find . -type f -name '*.gif' -print0 | xargs -0 -I % sh -c 'openssl dgst -sha512 -binary "$(basename "$1")" | openssl enc -base64 | tr "+/" "-_" | tr -d "=\n" > "$1.sum"' _ $1

丹尼斯·威廉姆森(Dennis Williamson)的解决方案让我如愿以偿,但安装的
tr
版本(2.0)却喜欢这种多字符语法。而且,
xargs
版本(4.1)不喜欢
-I
选项。然而,这让我开始了,这才是最重要的。以下是我的结论:

find . -type f -name '*.gif' -print0 | xargs -0 --replace=% sh -c 'echo -e "Archive-Asset-Name: %\nArchive-Asset-SHA-512-Digest: `openssl dgst -sha512 -binary % | openssl enc -base64 | tr "+" "-" | tr "/" "_" | tr -d "=" | tr -d "\n"`\n"'
这将生成以下图像(更改名称以保护无辜者)

我仍然需要调整名称,使其不带前缀
/
,但这是另一天的事

Archive-Asset-Name: ./IMG_0001.gif
Archive-Asset-SHA-512-Digest: AsgQnXYxj07qy-DTlzqYEv3v1UNqbr1sp5kVz0PE8FYwD-q_0VM20Wyci3xunJwdqy59MbyIX1GGtSmhuETUHQ

Archive-Asset-Name: ./IMG_0032.gif
Archive-Asset-SHA-512-Digest: JE3lmvXxOjSpDoUjyvAp92E1T4b8AQGGJBCcBz_1AG2eoBoSRH76LHpWPEUAeXFx_kOqEaDMRGPrpYnlfcnz9g

Archive-Asset-Name: ./IMG_0003.gif
Archive-Asset-SHA-512-Digest: bJJQ-j-s9630FzUh3hP50h7gWYqJQ6o0FP37nUuSeSUmerFxBwR2X0VeTYn-h4cf7szUr4fqDfAKQLOK0gt7zA