2017-01-30 17 views
1

Я пытаюсь автоматизировать репозиторий debian (для cydia) для обновления скриптом оболочки при создании новой сборки, это всегда работало до последней версии cydia, которая теперь, кажется, требует MD5 хэши файлов Packages, которые должны быть включены в файл Release. Я пробовал и не добавлять хэши программно, я могу получить хэш файла:Добавление md5sums в конец файла

echo -n | cat ./Packages | md5sum | awk '{print $1}' 

и я могу получить размер файла в байтах:

stat -f%z ./Packages 

, но я могу «т работать, как создать одну строку в виде:

c98fd649b21ebf3cc66d9e565f75284f 404 Packages 

и добавить его в соответствующую строку файла релиз

релиз файла:

Origin: Repo name 
Label: label 
Suite: stable 
Version: 0.9 
Codename: codename 
Architectures: iphoneos-arm 
Components: main 
Description: Description. 
MD5Sum: 
c98fd649b21ebf3cc66d9e565f75284f 404 Packages 
b361d77125813106377a48616c7c4a38 293 Packages.gz 
e2f125c1fa9ec8a183064d0b4fec3b3d 320 Packages.bz2 

Мой вопрос, как я могу заменить хэш и размер в байтах каждого файла Packages в версии?

ответ

1

Вы можете создать функцию, которая печатает хэш и размер в формате, который вы хотите:

print_hash_and_size() { 
    printf " %s %s %s\n" $(md5sum "$1" | awk '{print $1}') $(stat -c %s "$1") "$1" 
} 

И вызовите описанную выше функцию для каждого файла, который вы хотите добавить в файл выпуска.

{ 
    printf "%s\n" "MD5Sum"; 
    print_hash_and_size Packages; 
    print_hash_and_size Packages.gz; 
    print_hash_and_size Packages.bz2; 
} >> release_file 

Какой бы добавить четыре строки в файл, несколько, как в вашем примере:

MD5Sum: 
c98fd649b21ebf3cc66d9e565f75284f 404 Packages 
b361d77125813106377a48616c7c4a38 293 Packages.gz 
e2f125c1fa9ec8a183064d0b4fec3b3d 320 Packages.bz2 

Я вижу, вы используете эту последовательность команд, чтобы получить хэш:

echo -n | cat ./Packages | md5sum | awk '{print $1}' 

Не знаете почему нужны echo -n и cat. Имя файла можно передать в md5sum непосредственно в качестве аргумента, как я вижу в приведенной выше функции.

0

Если вам нужен один лайнер:

$ find -name 'Packages*' -printf "%P\n" | 
xargs -I FILE sh -c 'echo $(md5sum -b FILE | awk '\''{print $1}'\'') $(stat -c%s FILE) $(echo "FILE") | paste - - -' | 
sed -rn 'h;n;N;G;p' 

15bfecb2b041d5387aacdd32879e4e56 324 Packages 
997a7252f202566a1e5fdc5b50c2ffdf 283 Packages.gz 
e805c26ff46c6e138e3cd198cff281ea 301 Packages.bz2