Wget: 如果文件已存在,是否可以跳过下载?

11
答案:

回答“如果wget中存在文件则跳过下载”的问题建议使用-nc--no-clobber,但-nc不能防止发送HTTP请求和随后下载文件。如果文件已经完全获取,那么它只是在下载文件后不执行任何操作。是否有任何方法可以在文件已存在时防止发出HTTP请求?

我使用Homebrew安装了wget 1.16.3。执行下面的命令后,wget会为每个已经存在的文件说一些像"making HTTP request"的话,看起来像是正在下载它,然后又说了一些像"file already retrieved, nothing to do"的话。

wget --user-agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12' \
     --tries=1 \
     --no-clobber \
     --continue \
     --wait=0.3 \
     --random-wait \
     --adjust-extension \
     --load-cookies cookies.txt \
     --save-cookies cookies.txt \
     --keep-session-cookies \
         --recursive \
         --level=inf \
         --convert-links \
         --page-requisites \
         --reject=edit,logout,rate \
         --domains=example.com,s3.amazonaws.com \
         --span-hosts \
         --exclude-directories=/admin \
     http://example.com/

实际上,它不会发出任何请求,甚至没有HEAD请求来比较大小。可以尝试一下或者阅读源代码:http://git.savannah.gnu.org/cgit/wget.git/tree/src/main.c?id=v1.16.3#n1328 - plundra
2个回答

9

看起来您正在使用不兼容的选项,在Linux wget 1.16上我会收到以下警告:

$ wget --no-clobber --convert-links http://example.com
Both --no-clobber and --convert-links were specified, only --convert-links will be used.

9
-nc选项可以满足您的需求,至少在wget 1.19.1版本中可以实现。
在我的服务器上,有一个名为index.html的文件,其中包含指向a.htmlb.html的链接。
$ wget -r -nc http://127.0.0.1:8000/

服务器日志显示如下:

127.0.0.1 - - [23/Mar/2017 17:51:25] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /robots.txt HTTP/1.1" 404 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /a.html HTTP/1.1" 200 -
127.0.0.1 - - [23/Mar/2017 17:51:25] "GET /b.html HTTP/1.1" 200 -

现在我删除了b.html并再次运行:
$ rm 127.0.0.1\:8000/b.html
$ wget -r -nc http://127.0.0.1:8000/

服务器日志显示如下内容:
127.0.0.1 - - [23/Mar/2017 17:51:38] "GET /robots.txt HTTP/1.1" 404 -
127.0.0.1 - - [23/Mar/2017 17:51:38] "GET /b.html HTTP/1.1" 200 -

正如您所看到的,只有对 b.html 的请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接