web-dev-qa-db-ja.com

curlで中断されたダウンロードを自動的に再開する方法は?

Linuxではcurlを使用しています。 FTPサーバーでファイルの一部をダウンロードしていますが(-rオプションを使用)、接続がうまくいかず、常に中断します。再び接続したときにダウンロードを再開するスクリプトを書きたいのですが。

このコマンドを使用しましたが、機能しません。

until curl -r 666-9999 -C - --retry 999 -o "path/to/file" "ftp:/path/to/remote/file"; do :; done
28
Bili the big
curl -L -O your_url

ファイルがダウンロードされます。

ここで、接続が中断されたとしましょう。

curl -L -O -C - your_url

これは、最後にダウンロードされたバイトからダウンロードを続行します

マンページから:

「-C-」を使用して、転送を再開する場所/方法を自動的に見つけるようにcurlに指示します。次に、指定された出力/入力ファイルを使用してそれを把握します。

30
Kevin RED

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

13
sjaensch

Whileループで終了コードを確認し、ダウンロードが成功したことを終了コードが示すまで再開できます。

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

例は http://ilovesymposia.com/2013/04/11/automatically-resume-interrupted-downloads-in-osx-with-curl/ から取得されます

10