2011-02-24 117 views
1

BlackBerry WebWorks SDK for Tablet OS构建工具生成包含文件和MANIFEST.MF的存档,其中包含每个文件的条目以及base64编码的SHA512摘要。但是,存在一个错误,即构建中的文件太多会导致构建失败。我想弄清楚如何自己生成同样的信息。为文件(或文件集)生成base64编码的SHA512摘要

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

Archive-Asset-Name: air/XX/IMG_0999.jpg 
Archive-Asset-SHA-512-Digest: YI_KXWjpJwwsi5MDQPeBQc9SVi-bH6zYq5PgBD3jQiqHu-r-5Hv8A0yh_y5j2T9MpYZ5TVMW4JXHSXNYmpV1tA 

我运行的是Windows 7,但安装了GIT,因此我将MINGW32作为bash shell。我发现这个openssl和tr命令的组合管道,但它似乎有点混乱。

openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr '+' '-' | tr '/' '_' | tr -d '=' | tr -d '\n' 

有没有更好的方法来生成这个摘要?最终,我将不得不为目录树中的所有图像执行操作。我希望得到一个脚本解决方案,而不必编写一个程序。第二个问题是如何为目录中的所有文件生成清单语法(递归)。这是一个包含上述命令的bash shell脚本吗?任何指针在这里都会被赞赏,因为我之前没有写过shell脚本。

回答

1

丹尼斯·威廉姆森公司的解决方案让我去,但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 

我还需要调整名称不能与./作为前缀,但那是另一天。

1

您可以通过一些事情结合缩短您的命令:在一棵树上

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