Ständiger erneuter Versuch, Downloads mit Wellung fortzusetzen


17

Ich bin auf einem Mac und habe eine Liste von Dateien, die ich von einem FTP-Server herunterladen möchte. Die Verbindung ist ein bisschen fehlerhaft, daher möchte ich, dass es erneut versucht und fortgesetzt wird, wenn die Verbindung getrennt wird.

Ich weiß, dass ich das mit wget machen kann, aber leider kommt Mac OS X nicht mit wget. Ich könnte es installieren, aber um das zu tun (es sei denn, ich habe etwas übersehen), muss ich zuerst XCode und MacPorts installieren, was ich vermeiden möchte.

Curl ist verfügbar, obwohl es scheint, aber ich weiß nicht, wie das funktioniert oder wie man es wirklich benutzt. Wenn eine Textdatei eine Liste von Dateien enthält (ein vollständiger Pfad pro Zeile, z. B. ftp: // user: pass @ server / dir / file1 ), wie kann ich curl zum Herunterladen all dieser Dateien verwenden? Und kann ich mich kräuseln, um niemals aufzugeben? Versuchen Sie es erneut und setzen Sie das Herunterladen fort, wo es aufgehört hat und so weiter?

Antworten:


20

Nachdem ich eine Weile gegoogelt und gelesen habe, habe ich eine Lösung gefunden, die für mich funktioniert hat:

curl ftp://server/dir/file[01-30].ext --user user:pass -O --retry 999 --retry-max-time 0 -C -
  • [01-30] Es werden 30 Dateien mit den Namen file01.ext, file02.ext usw. heruntergeladen
  • --user user:pass sollte offensichtlich sein
  • -O um Dateien mit dem ursprünglichen Namen auszugeben
  • --retry 999 999-mal zu wiederholen
  • --retry-max-time 0um zu verhindern, dass die Wiederholungsversuche zeitlich begrenzt werden. Das Standardverhalten, wenn Sie keine feste --retry-Verzögerung angeben, besteht darin, zwischen den Wiederholungsversuchen zunächst eine Sekunde zu warten und diese dann zu verdoppeln, bis 10 Minuten erreicht sind. zwischen Wiederholungsversuchen
  • -C -um fortzufahren, wo es hingefallen ist (wenn Sie den Befehl erneut ausführen). Der Bindestrich sagt ihm danach, wo er weitermachen soll

Wenn jemand weiß, wie er die Dateinamen aus einer Datei abruft, lassen Sie es mich bitte wissen.


In der Manpage steht folgendes:

--url Geben Sie <URL>
eine URL an, die abgerufen werden soll . Diese Option ist vor allem dann nützlich, wenn Sie URLs in einer Konfigurationsdatei angeben möchten.

Scheint so, könnte etwas sein, aber verstehe nicht ganz, wie es verwendet werden würde ...


2

Mit der Option -K können Sie sich drehen, um eine Konfigurationsdatei anzugeben. In diesem Fall verwenden Sie die Syntax:

optionname=<value>

Wenn Sie eine Datei haben, die eine Liste von URLs enthält, können Sie die Locke wie folgt verwenden:

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

Das transformiert eine Liste von URLs, wie:

http://host1.com/foo.html
http://host2.com/bar.html

in ein Format wie dieses:

-O
url=http://host1.com/foo.html
-O
url=http://host2.com/bar.html

Curl liest das und interpretiert jede dieser ähnlichen Optionen.

HTH,

Adam

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.