我正在编写一个涉及下载和操作文件的脚本,并且我想在处理该文件之前确保该文件不是不完整的(例如由于连接断开)。
答案1
验证下载文件完整性的最常见方法是使用 MD5 校验和。这假设您正在下载的站点实际发布了其文件的 MD5 校验和。您可以通过创建自己的下载文件校验和并将其与发布的校验和进行比较来验证 MD5 校验和。如果它们相同,则您下载的文件是完整的且未被篡改。
如果您不希望正在下载的文件发生更改,您可以预先计算校验和并将其硬编码到脚本中,但如果文件被更新,验证将失败。
要创建文件的 MD5 校验和,请运行md5sum myFile
.对于 wget,您可能会发现此命令很有用,特别是当您下载的文件很大时:
wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM
。
这将在下载时创建“myFile”的校验和并将其保存到文件 MD5SUM,可能会节省您一些时间。
在连接断开的情况下,我认为最好的方法是检查 wget 的退出代码。如果下载成功且没有任何错误,wget 将返回0
。任何其他情况都表明出了问题。查看 的“退出状态”部分man wget
。
答案2
用于下载文件的命令的返回码将告诉您该命令是否成功执行。通常,返回代码 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
错误变得更加困难。