继续中断的“curl”下载

继续中断的“curl”下载

我正在通过网络下载一个大文件。下载时(比如 40%),底层机器会与网络断开连接,在curl退出之前,网络会连接。但在这种情况下,curl 不会恢复该过程。

最终卷发退出了。

哪些开关curl可以帮助我恢复中断的下载?

编辑:对问题的更多解释

18:43:20 PM    SHW@SHW:/tmp # curl http://ip-address.com/BigFile
18:43:40 PM                   <Downloading in progress>
18:43:50 PM                   <Downloading in progress>
18:44:10 PM                   <network get disconnected>
18:44:20 PM                   <Downloading get stuck>
18:44:30 PM                   <Network get connected>
18:44:40 PM                   <DOWNLOAD MUST RESUME NOW>      <==

根据上面的时间戳,我想在退出已启动的进程curl之前恢复下载。curl我不想重新执行curl命令

答案1

您可以使用

curl -L -O --retry 999 --retry-max-time 0 -C - http://url
  • -C -:从上次下载停止的地方继续
  • --retry 999: 重试了很多次
  • --retry-max-time 0:防止重试超时

或者

curl -L -o 'filename' -C - http://url

更新

export ec=18; while [ $ec -eq 18 ]; do /usr/bin/curl -O -C - "http://www.example.com/big-archive.zip"; export ec=$?; done

解释 :

下载中断时,curl 的退出代码为 18,并$?为您提供 bash 中最后一个命令的退出代码。因此,当退出代码为 18 时,请继续尝试下载文件,并保持文件名(-O)


我个人的偏好是使用wget专门为此用例构建的。从手册页:

Wget has been designed for robustness over slow or unstable network connections;
if a download fails due to a network problem, it will keep retrying until the
whole file has been retrieved.  If the server supports regetting, it will
instruct the server to continue the download from where it left off.

wget适用于几乎所有 Linux 发行版 - 它可能已经安装在您的发行版上。只要使用wget下载文件,它就会重新建立网络连接,直到文件完全传输。

相关内容