bash - 创建带有校验和验证的文件下载脚本

标签 bash curl shell checksum backticks

我想创建一个从 .diz 文件中读取文件的 shellscript,其中存储了有关各种源文件的信息,这些文件是编译某个软件(在本例中为 imagemagick)所需的。我在这个例子中使用的是 Mac OSX Leopard 10.5。

基本上,我希望有一种简单的方法来维护这些包含最新源包信息的 .diz 文件。我只需要使用 URL、版本信息和文件校验和更新这些 .diz 文件。

示例行:

libpng:1.2.42:libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:http://downloads.sourceforge.net/project/libpng/00-libpng-stable/1.2.42/libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:9a5cbe9798927fdf528f3186a8840ebe

脚本部分:

while IFS=: read app version file url md5
do 
  echo "Downloading $app Version: $version"
  curl -L -v -O $url 2>> logfile.txt
  $calculated_md5=`/sbin/md5 $file | /usr/bin/cut -f 2 -d "="`
  echo $calculated_md5    
done < "files.diz"

其实我的问题不止一个。

  1. 如何最好地计算和比较校验和?我想将 md5 校验和存储在 .diz 文件中,并将其与字符串比较与“剪切”字符串进行比较
  2. 有没有办法告诉 curl 另一个要保存到的文件名? (在我的例子中,文件名变得丑陋 libpng-1.2.42.tar.bz2?use_mirror=biznetworks)
  3. 我似乎对应该引导管道 md5 的输出并切入变量 $calculated_md5 的反引号有疑问。语法错误吗?

谢谢!

最佳答案

下面是一个实用的单行:

curl -s -L <url> | tee <destination-file> |
sha256sum -c <(echo "a748a107dd0c6146e7f8a40f9d0fde29e19b3e8234d2de7e522a1fea15048e70  -") ||
rm -f <destination-file>

将其包装在一个带有 3 个参数的函数中: - 网址 - 目的地 - sha256

download() {
   curl -s -L $1 | tee $2 | sha256sum -c <(echo "$3  -") || rm -f $2
}

关于bash - 创建带有校验和验证的文件下载脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086424/

相关文章:

linux - Bash 帮助删除嵌套目录

xml - 如何使用 linux 命令(示例 sed)删除 xml 文件中的属性

linux - 大括号扩展 - 表达式太多

bash - 查找两个文件之间的属性增量

linux - 如何处理 shell 脚本中的引号

curl - 将带括号的 URL 传递给curl

mysql - 从外部主机获取动态数据 - 建立 mysql 连接或通过curl获取数据?

bash - 如果找到数字,如何按模式在 bash 中拆分文件

linux - 使用 [! -d "$DIR"]

php Curl 无法在 if 语句中正确读取响应,回显正常