如果要批量下载一个url下的资源,用wget/curl/bash
怎么实现?
譬如url="http://go.googlecode.com/files/"
直接wget -r ${url}
的话会出现
➜ golang wget -r https://go.googlecode.com/files/
--2014-10-14 06:02:40-- https://go.googlecode.com/files/
Resolving go.googlecode.com (go.googlecode.com)... 74.125.130.82, 2404:6800:4003:c01::52
Connecting to go.googlecode.com (go.googlecode.com)|74.125.130.82|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2014-10-14 06:02:40 ERROR 404: Not Found.
资源示例:"https://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz"
补充下结论吧:如果web服务器不提供一个一个目录下所有资源的汇总页面,是无法进行递归下载的
“wget -r”命令中参数r的解释确实如题主所说,可用于递归下载:
但执行完命令之后,确实遇到了和题主一样的窘境,授人以鱼不如授人以渔吧,题主可以通过使用strace跟踪wget命令的执行情况:(注:为了方便阅读http协议,这里将https替换成了http)
这里,也附上strace命令参数详解:点击我,谢谢
然后,vim打开strace.log:

![通过分析日志,可以发现web服务器上不存在此文件,故返回了404错误(一般来说,如果url对应一个目录,wget服务器会自动补全成“http://go.googlecode.com/files/index.html”)。
由此,可看出,wget递归下载的逻辑是:下载指定url-》解析返回结果-》提取urllist-》遍历urllist-》执行下载-解析返回结果。。。
这里再附上可以正常递归下载的情况: