Най- BlackBerry WebWorks SDK за Tablet OS инструмент за изграждане генерира архив, който съдържафайлове и MANIFEST.MF с вписване за всеки файл и даунлоуд SHA512, кодиран в base64. Въпреки това, има грешка, която твърде много файлове в изграждането ще доведе до грешка при изграждането. Опитвам се да разбера как да генерирам същата информация.
Примерът по-долу идва от 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, но изглежда малко на kludge.
openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr "+" "-" | tr "/" "_" | tr -d "=" | tr -d "n"
Има ли по-добър начин за генериране на този сборник?
Накрая ще трябва да направя за всички изображенияв дърво на директории. Надявах се на сценарий, вместо да се налага да пиша програма. Вторият въпрос е как да генерираме явен синтаксис за всички файлове в директория (рекурсивно). Ще бъде ли това баш скрипт, обхващащ горната команда? Всички указатели тук са оценени, тъй като аз не съм написал скрипт преди.
Отговори:
1 за отговор № 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
1 за отговор № 2
Решението на Денис Уилямсън ме накара да отида, но не 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
Аз все още трябва да ощипвам името, за да не бъде с представка ./
но това е за друг ден.