2011-02-24 121 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