Parallele downloads mit Curl-Befehlszeile-Dienstprogramm
Will ich laden Sie einige Seiten aus einer website und ich habe es erfolgreich mit curl
aber ich Frage mich, ob irgendwie curl
downloads mehrere Seiten auf einmal, genau wie die meisten download-Managern zu tun, es beschleunigt die Dinge ein wenig. Ist es möglich, es zu tun in curl
Befehlszeilen-Dienstprogramm?
Den aktuellen Befehl, den ich verwende, ist
curl 'http://www...../?page=[1-10]' 2>&1 > 1.html
Hier bin ich Download-Seiten von 1 bis 10 und speichert Sie in einer Datei namens 1.html
.
Außerdem ist es möglich, für curl
zu schreiben-Ausgang von jeder URL, um separate Datei sagen URL.html
wo URL
ist die eigentliche URL der Seite unter " Prozess.
InformationsquelleAutor der Frage Ravi Gupta | 2011-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut,
curl
ist nur ein einfaches UNIX-Prozess. Sie können so viele diesercurl
Prozesse parallel ausgeführt und schickt seine Ausgänge auf verschiedene Dateien.curl
verwenden können, die mit dem Namen-Teil der URL zu generieren lokale Datei. Verwenden Sie einfach die-O
option (man curl
für details).Könnten Sie etwas wie das folgende
InformationsquelleAutor der Antwort nimrodm
Meine Antwort ist ein bisschen spät, aber ich glaube, dass alle vorhandenen Antworten fallen nur ein wenig kurz. Die Art, wie ich Dinge wie das mit
xargs
die fähig ist, eine bestimmte Anzahl von Befehlen in Teilprozesse.Die one-liner, die ich verwenden würde, ist einfach:
Dies garantiert eine Erklärung. Die Verwendung von
-n 1
weistxargs
zum verarbeiten einer einzelnen Eingangs-argument zu einem Zeitpunkt. In diesem Beispiel werden die zahlen1 ... 10
sind jeweils separat verarbeitet. Und-P 2
sagtxargs
zu halten 2 Teilprozesse die ganze Zeit laufen, jeweils mit einem einzigen argument, bis alle input-Argumente verarbeitet wurden.Können Sie denken, dies als MapReduce in der shell. Oder vielleicht einfach nur die Map-phase. Unabhängig davon, ist es ein effektiver Weg, um eine Menge Arbeit getan, während Sie sicherstellen, dass Sie don ' T fork-Bombe Ihre Maschine. Es ist möglich, etwas ähnliches zu tun, in einer for-Schleife in einer shell, aber am Ende tut process management, die beginnt, scheint ziemlich sinnlos, sobald Sie feststellen, wie wahnsinnig toll diese Verwendung von
xargs
ist.Update: ich vermute, dass mein Beispiel mit
xargs
verbessert werden könnte (zumindest auf Mac OS X und BSD mit der-J
flag). Mit GNU Parallel, der Befehl ist ein bisschen weniger schwerfällig als gut:InformationsquelleAutor der Antwort ndronen
Curl kann auch beschleunigen den download einer Datei durch teilen es in die Teile:
Hier ist ein Skript, dass automatisch gestartet, curl mit der gewünschten Anzahl gleichzeitiger Prozesse: https://github.com/axelabs/splitcurl
InformationsquelleAutor der Antwort AXE-Labs
Für den Start von parallelen Befehlen, warum man nicht die ehrwürdigen
make
Befehlszeilen-Dienstprogramm.. Es unterstützt parallell Ausführung und Verfolgung von Abhängigkeiten und so weiter.Wie? In das Verzeichnis, in dem Sie das herunterladen von Dateien, erstellen Sie eine neue Datei namens
Makefile
mit folgendem Inhalt:HINWEIS Die letzten beiden Zeilen beginnen mit einem TABULATOR-Zeichen (anstelle von 8 Leerzeichen) oder stellen Sie die Annahme der Datei.
Nun müssen Sie nur ausführen:
Den curl-Befehl, den ich verwendet werden, speichern Sie die Ausgabe in
1.html.tmp
und nur, wenn der curl-Befehl ist erfolgreich, dann wird es umbenannt in1.html
(durch diemv
Befehl auf der nächsten Zeile). Wenn also einige download fehlschlagen sollte, können Sie einfach erneut ausführen die gleichenmake
Befehl, und es wird fortsetzen/wiederholen herunterladen der Dateien, Fehler beim herunterladen der in der ersten Zeit. Sobald alle Dateien erfolgreich heruntergeladen wurden, machen wird, berichten, dass es nichts mehr zu tun, so schadet es nicht, läuft er ein weiteres mal, dass "sicher".(Die
-k
Schalter sagt, machen Sie zu halten, herunterladen der restlichen Dateien, auch wenn ein download fehlschlägt.)InformationsquelleAutor der Antwort Jonas Berlin
Führen eine begrenzte Anzahl von Verfahren ist einfach, wenn Sie Ihr system mit Befehlen wie
pidof
oderpgrep
die, gegeben ein Prozess, name, return die pids (die Anzahl der pids sagen, wie viele ausgeführt werden).Etwas wie dieses:
aufrufen wie diesem:
Curl-Zeile des script ist ungetestet.
InformationsquelleAutor der Antwort Alex
Ich bin nicht sicher, über curl, aber Sie können tun, dass mit wget.
InformationsquelleAutor der Antwort zengr
Ich kam mit einer Lösung auf Basis
fmt
undxargs
. Die Idee ist, geben Sie mehrere URLs in Klammernhttp://example.com/page{1,2,3}.html
und führen Sie diese parallel mitxargs
. Folgendes möchte starten Sie den Download in 3 Prozess:also 4 herunterladbare Linien von URLs generiert und an
xargs
InformationsquelleAutor der Antwort Slava Ignatyev