web-dev-qa-db-ja.com

curlを使用してダウンロードを再開することを永続的に再試行する

私はMacを使用していて、ftpサーバーからダウンロードしたいファイルのリストを持っています。接続が少しバグがあるので、接続が切断された場合に再試行して再開したいと思います。

私はこれをwgetで実行できることを知っていますが、残念ながらMac OSXにはwgetが付属していません。私はそれをインストールすることができましたが、それを行うには(何かを見逃していない限り)最初にXCodeとMacPortsをインストールする必要があります。これは避けたいと思います。

カールはあるようですが、どうやって動くのか、どうやって使うのかわかりません。テキストファイルにファイルのリストがある場合( ftp:// user:pass @ server/dir/file1 のように1行に1つのフルパス)、curlを使用してこれらすべてのファイルをダウンロードするにはどうすればよいですか? ?そして、私は決してあきらめないためにカールを得ることができますか?たとえば、無限に再試行して、中断したところからダウンロードを再開しますか?

17
Svish

グーグルや男性の読書などをしばらく行った後、私は自分に役立つ解決策を見つけました:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30]は、file01.ext、file02.extなどの名前の30個のファイルをダウンロードします。
  • --user user:passは明白なはずです
  • -O元の名前のファイルに出力する
  • --retry 999999回再試行します
  • --retry-max-time 0再試行のタイムアウトを防ぐため。固定の--retry-delayを指定しない場合のデフォルトの動作は、再試行の間に最初の1秒間スリープし、その後10分に達するまでそれを2倍にすることです。再試行の間
  • -C -ドロップした場所から続行します(コマンドを再度実行した場合)。その後のダッシュは、どこから再開するかを理解するように指示します

代わりにファイルからファイル名を取得する方法を誰かが知っている場合は、私に知らせてください。


Manページには次のように書かれています。

--url <URL>
フェッチするURLを指定します。このオプションは、構成ファイルでURLを指定する場合に最も便利です。

それは何かかもしれないようですが、それがどのように使用されるかを完全には理解していません...

21
Svish

-Kオプションを使用してcurlを実行し、構成ファイルを指定できます。その場合、次の構文を使用します。

optionname=<value>

URLのリストを含むファイルがある場合は、次のようにcurlを使用できます。

sed 's/\(.*\)/-O\nurl=\1/g' url_list.txt | curl -K -

これは、次のようにURLのリストを変換します。

http://Host1.com/foo.html
http://Host2.com/bar.html

このような形式に:

-O
url=http://Host1.com/foo.html
-O
url=http://Host2.com/bar.html

Curlはそれを読み取り、オプションのようにそれぞれを解釈します。

HTH、

アダム

2
ahawtho