web-dev-qa-db-ja.com

「カール」ダウンロードの中断を続行

大きなファイルをネットワーク経由でダウンロードしています。ダウンロード中(たとえば、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コマンドを再実行したくない

4
SHW

あなたは使うことができます

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を使用してファイルをダウンロードするだけで、ファイルが完全に転送されるまでネットワーク接続が再確立されます。

11
Rahul