持续重新尝试使用curl恢复下载


17

我在Mac上,有一些要从ftp服务器下载的文件列表。连接有点麻烦,因此如果连接断开,我希望它重试并恢复。

我知道我可以使用wget来做到这一点,但是不幸的是Mac OS X并不附带wget。我可以安装它,但是要这样做(除非我错过了什么),我需要先安装XCode和MacPorts,我想避免这样做。

虽然可以使用Curl,但我不知道它是如何工作的或如何真正使用它。如果我在文本文件中有文件列表(每行一个完整路径,如ftp:// user:pass @ server / dir / file1),如何使用curl下载所有这些文件?我可以卷翘以永不放弃吗?例如,无限重试并在中断的地方继续下载,诸如此类?

Answers:


20

经过谷歌搜索和人阅读等一段时间之后,我想出了一个对我有用的解决方案:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30] 将使其下载30个文件,分别名为file01.ext,file02.ext等
  • --user user:pass 应该很明显
  • -O 输出到原始名称的文件
  • --retry 999 重试999次
  • --retry-max-time 0以防止其超时重试。如果未指定固定的--retry-delay,则默认行为是在重试之间先睡一秒钟,然后将其加倍,直到达到10分钟。重试之间
  • -C -使它在放下的位置继续(如果再次运行该命令)。破折号告诉它找出从哪里恢复

如果有人知道如何从文件中获取文件名,请告诉我。


在手册页中显示以下内容:

--url <URL>
指定要获取的URL。当您要在配置文件中指定URL时,此选项非常方便。

似乎可能是这样,但不太了解如何使用...


2

您可以使用-K选项来卷曲以指定配置文件。在这种情况下,请使用以下语法:

optionname=<value>

如果您有一个包含URL列表的文件,则可以使用curl,如下所示:

sed 's/\(.*\)/-O\nurl=\1/g' url_list.txt | curl -K -

转换网址列表,例如:

http://host1.com/foo.html
http://host2.com/bar.html

变成这样的格式:

-O
url=http://host1.com/foo.html
-O
url=http://host2.com/bar.html

Curl读取并解释每个类似的选项。

HTH,

亚当

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.