将md5sums附加到文件末尾

时间:2017-01-30 03:51:58

标签: bash macos awk debian cydia

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

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文件的哈希值和字节大小?

2 个答案:

答案 0 :(得分: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,正如我在上面的函数中看到的那样。

答案 1 :(得分: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