如果某个网站瘫痪(或下载过程中超时) ,我该如何wget
(可能借助 bash 脚本)尝试一系列镜像?例如,首先尝试下载https://www.example.com/file.gz
,如果失败,再尝试https://mirror1.example.com/file.gz
,然后https://another.example.com/file.gz
?
答案1
尝试这个:
#!/bin/sh
for site in www.example.com mirror1.example.com another.mirror.com
do
wget --timeout=60 --continue $site/file.gz && break
done
该--continue
开关可让您从上一个站点停止的地方继续下载。
--dns-timeout
请注意,--connect-timeout
如果--read-timeout
需要,您可以单独设置。
答案2
Ken Jackson 的回答非常准确,说明了如何执行此操作。但是,我在此假设您已将所有链接放在一个单独的文件中。在这种情况下,您实际上不需要任何 bash 脚本来完成此工作。您只需运行:
$ wget --timeout=60 --tries=1 --continue --input-file <inputfile>
为了获得美观的输出,我还使用了-q --show-progress
强制 Wget 仅显示进度条而不显示其他内容的功能。
上述命令的作用是尝试下载您提供的文件中的每个链接。但是,在下载整个文件后,它将简单地查询每个服务器,意识到文件已经存在,然后继续。这浪费了非常微小额外的带宽,但输入起来更容易,并且不需要多次调用二进制文件。