大きなファイルをネットワーク経由でダウンロードしています。ダウンロード中(たとえば、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コマンドを再実行したくない
あなたは使うことができます
curl -L -O --retry 999 --retry-max-time 0 -C - http://url
--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)
を維持し、前回のダウンロードが中断したところ(-C)
を再開します。
私の個人的な好みは、この使用例のために特別に構築されたwget
を使用することです。 manページから:
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
を使用してファイルをダウンロードするだけで、ファイルが完全に転送されるまでネットワーク接続が再確立されます。