2017-01-30 94 views
1

我試圖自動化一個debian存儲庫(爲cydia)由shell腳本更新時,創建一個新的構建,這一直工作,直到最新版本的cydia,現在似乎需要MD5 Packages文件的哈希將包含在發佈文件中。我已經嘗試和失敗,哈希程序追加,我可以得到文件的散列:追加md5sums到文件結尾

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

,我可以得到該文件的字節大小:

stat -f%z ./Packages 

,但我可以「T工作,如何在表單中創建一個行:

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 

我的問題是,我怎麼能代替在每個版本的軟件包文件的字節哈希和大小?

回答

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 -ncat。文件名可以直接作爲參數傳遞給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