检查网络服务器上托管的文件头的 MD5

检查网络服务器上托管的文件头的 MD5

我正在编写一个 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 …

相关内容