使用perl(或wget)仅下载新的/修改过的文件

Cha*_*les 3 shell perl http

我有一个Perl脚本,它从远程服务器下载大量文件.我想避免锤击服务器,所以我想避免下载文件,如果它自我上次检查后没有被修改过.有没有一种好方法可以在Perl或shell脚本中执行此操作?

我可以让服务器为未修改的文件发送HTTP 304而不是HTTP 200吗?

Eva*_*oll 5

是的,使用LWP::UserAgent并特别注意该mirror方法.这在程序中也可以LWP::Simple作为mirror函数使用.

来自LWPPOD:

此方法将获取$ url标识的文档,并将其存储在名为$ filename的文件中.如果该文件已存在,则该请求将包含与文件的修改时间匹配的"If-Modified-Since"标头.如果此时服务器上的文档没有更改,则没有任何反应.如果文档已更新,将再次下载.将强制文件的修改时间与服务器的修改时间匹配.

返回值是响应对象.

HTTP 304是服务器在您通过If-Modified-Since测试并且您的副本是新的时将返回的响应代码.LWP在内部执行此操作mirror- 您无需担心它.

  • 是.有.但是,对于LWP,这需要您使用[HTTP :: Request](http://search.cpan.org/~gaas/libwww-perl-5.836/lib/HTTP/Request.pm)和`$ ua- >请求()`直接.查看[LWP :: UserAgent](http://cpansearch.perl.org/src/GAAS/libwww-perl-5.836/lib/LWP/UserAgent.pm)的源代码,阅读镜像子定义.如果你希望透明地发生这种情况,你也可以继承`LWP :: UserAgent`并覆盖镜像,子类化`LWP :: UserAgent`真的允许你做一些非常棒的东西. (2认同)