我正在编写一个 bash 脚本,使用 cURL 定期下载安装文件。问题如下,该文件大约 110 MB,并且始终具有相同的文件名。
我可以下载该文件,检查其哈希值(md5,sha1)并将其与之前下载的文件进行比较:
- 如果哈希值相等,则文件相同且未更新:在这种情况下,我无缘无故地下载了它。
- 如果哈希值不同,则网络服务器上的文件是新版本:在这种情况下,我使用此文件并更新到新版本。
我想每半小时运行一次这个脚本,但免费下载 110MB(相同文件版本)让我很困扰。有没有办法使用命令行中的 curl 下载前 500KB?
我目前的解决方法是比较 HTTP 标头中的文件大小,但我仍然希望得到上述问题的答案,并知道这是否可行。非常感谢。
curl -sI 'http://domain.tld/uri/updater/getLatest.etcenter?c=var&asi=allright' -H '主机:domain.tld' -H '用户代理:Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) 如 Gecko' -H '接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8' -H '接受语言:en-US,en;q=0.5' -H '接受编码:gzip、deflate、br' -H 'DNT:1' -H '连接:保持活动' | grep '内容长度:'
答案1
您是否可以信任客户端和服务器上文件的修改日期?如果可以,您可以使用 HTTP 的“条件 GET”/“If-Modified-Since”功能和curl
选项-z
。无需下载任何内容。这是 HTTP 协议的内置功能,自一开始就被广泛使用。
如果服务器上文件的修改日期不比您上次下载的文件的修改日期新,则无需下载任何内容。
对于您的bash
脚本,考虑使用来stat(1)
查找本地文件的修改时间,以便您可以将该信息输入到curl -z …
。