我想创建一个从.diz文件中读取文件的shellcript,其中存储了编译某个软件所需的各种源文件的信息(在本例中为imagemagick)。我在这个例子中使用Mac OSX Leopard 10.5。
基本上我希望有一种简单的方法来维护这些.diz文件,这些文件包含最新源包的信息。我只需要使用网址,版本信息和文件校验和更新这些.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"
实际上我不仅仅有一个问题。
谢谢!
答案 0 :(得分:6)
while IFS=: read app version file url md5
do
echo "Downloading $app Version: $version"
#use -o for output file. define $outputfile yourself
curl -L -v $url -o $outputfile 2>> logfile.txt
# use $(..) instead of backticks.
calculated_md5=$(/sbin/md5 "$file" | /usr/bin/cut -f 2 -d "=")
# compare md5
case "$calculated_md5" in
"$md5" )
echo "md5 ok"
echo "do something else here";;
esac
done < "files.diz"
答案 1 :(得分:4)
以下是实用的单行内容:
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
}
答案 2 :(得分:0)
我的curl
有一个-o
(--output
)选项来指定输出文件。您对$calculated_md5
的分配也存在问题。分配给它时,它不应该在前面有美元符号。我在这里没有/sbin/md5
所以我不能对此发表评论。我所拥有的是md5sum
。如果您也拥有它,您可以将其视为替代方案。特别是,它有一个--check
选项,可以从md5sums的文件列表中运行,这可能对您的情况很方便。 HTH。