
ネットワーク経由で大容量ファイルをダウンロードしています。ダウンロード中(たとえば40%)、プライマリマシンはネットワークから切断され、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
カールコマンドを再実行したくありません。
答え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
説明する:
ダウンロードが中断されると、カールの終了コードは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
ファイル転送が完了するまでネットワーク接続が再確立されます。