持续尝试使用 curl 恢复下载

持续尝试使用 curl 恢复下载

我在 Mac 上,有一份我想从 ftp 服务器下载的文件列表。连接有点问题,所以我想让它在连接断开时重试并恢复。

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

虽然看起来 Curl 可用,但我不知道它是如何工作的,或者如何真正使用它。如果我有一个文本文件中的文件列表(每行一个完整路径,例如ftp://用户名:密码@服务器/目录/文件1) 我该如何使用 curl 下载所有这些文件?我可以让 curl 永不放弃吗?比如,无限次重试并从中断的地方恢复下载等?

答案1

经过一段时间的谷歌搜索和阅读等,我找到了一个适合我的解决方案:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30]将使其下载名为 file01.ext、file02.ext 等的 30 个文件
  • --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 -

它将转换 URL 列表,例如:

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 读取这些内容并将其解释为选项。

高血压,

亚当

相关内容