我正在通过网络下载一个大文件。下载时(比如 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
下载文件,它就会重新建立网络连接,直到文件完全传输。