Answers:
验证下载文件完整性的最常用方法是使用MD5校验和。假设您正在从其文件的实际发布的MD5校验和中下载的站点。您可以通过创建自己的下载文件校验和并将其与发布的校验和进行比较来验证MD5校验和。如果它们相同,则您已下载的文件已完成并且未被篡改。
如果您不希望下载的文件发生更改,则可以预先计算校验和并将其硬编码到脚本中,但是如果文件已更新,则验证将失败。
要创建文件的MD5校验和,请运行md5sum myFile
。对于wget,您可能会发现此命令很有用,尤其是当您下载的文件很大时:
wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM
。
这将在下载时创建“ myFile”的校验和,并将其保存到文件MD5SUM中,可能节省您一些时间。
在断开连接的情况下,我认为最好的方法是检查wget的退出代码。如果下载成功,没有任何错误,则wget将返回0
。其他任何指示都出了问题。查看中的“退出状态”部分man wget
。
用于下载文件的命令的返回码将告诉您命令是否成功执行。通常,返回码0表示成功,任何非零数字表示错误。您可以通过$?
变量访问返回码。
使用的一个基本示例wget
将是:
#!/bin/bash
wget foo.tgz &> /dev/null
if [[ "$?" != 0 ]]; then
echo "Error downloading file"
else
echo "Success"
fi
&> /dev/null
将所有wget的输出重定向到,/dev/null
因此非常适合编写脚本,但是这会使调试wget
错误更加困难。
wget -q ... || { handle ; error ; }
man
通读答案时才发现它,而我要说的两件事已经在两个答案中了-所以我做了两个评论。也很高兴给您。
wget
即使下载失败,也可能认为下载已完成。代理有关断开的TCP连接与关闭的TCP连接的信息,这对于HTTP来说是有问题的,因为默认情况下它使用关闭的TCP作为结束标记。这就是为什么当我进行大量下载时,我添加了检查标题中的文件大小是否与下载的文件大小匹配的原因。不知道是否进行了wget
这种一致性检查,或者不确定http规范在此问题上怎么说。