将 md5sums 附加到文件末尾

Appending md5sums to end of file

我正在尝试在创建新版本时通过 shell 脚本自动更新 debian 存储库(用于 cydia),这一直有效,直到最新版本的 cydia 现在似乎需要 MD5要包含在发布文件中的包文件的哈希值。我尝试过以编程方式附加哈希但失败了,我可以获得文件的哈希:

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

我可以得到文件的字节大小:

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

我的问题是,如何替换 Release 中每个 Packages 文件的哈希值和字节大小?

您可以创建一个函数,以您想要的格式打印散列和大小:

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

并为每个要附加到发布文件的文件调用上述函数。

{
  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 }'

不确定为什么需要 echo -ncat。文件名可以作为参数直接传递给 md5sum,正如我在上面的函数中看到的那样。

如果您需要一根衬垫:

$ find -name 'Packages*' -printf "%P\n" |
xargs -I FILE sh -c 'echo $(md5sum -b FILE | awk '\''{print }'\'') $(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