Batch-Download von URLs aus der Befehlszeile mit Multithreading

3839
William Entriken

Ich habe 100.000 URLs kleiner Dateien zum Herunterladen. Möchte 10 Threads verwenden und Pipelining ist ein Muss. Ich füge das Ergebnis zu einer Datei zusammen. Derzeitiger Ansatz ist:

cat URLS | xargs -P5 -- curl >> OUTPUT 

Gibt es eine bessere Option, die den Fortschritt der gesamten Operation anzeigt? Muss von der Kommandozeile aus arbeiten.

3
"Ich möchte 10 Threads verwenden und Pipelining ist ein Muss. Ich füge das Ergebnis zu einer Datei zusammen." Die Reihenfolge ist also egal! Bobby vor 10 Jahren 0
Verwenden Sie [GNU parallel] (http://www.gnu.org/software/parallel/), damit wird sogar die Reihenfolge der Ausgabe beibehalten. Wenn Sie Ihre Frage entsprechend kennzeichnen, könnten Sie Glück haben und [der Autor] (http://superuser.com/users/41337/ole-tange) könnte ein Signal ertönen ;-) Adrian Frühwirth vor 10 Jahren 1
Ordnung ist kein Thema. Getagged für GNU-Parallel gute Idee. Ist es möglich, parallel zu verwenden und trotzdem das Pipelining in Locken zu bekommen? William Entriken vor 10 Jahren 0
Werden die Dateien nicht miteinander vermischt, wenn Sie das tun? Wenn Ihr Webserver kein Single-Threading ist, sehe ich nicht, wie Sie vermeiden würden, dass zwei Prozesse gleichzeitig in Ihre Ausgabedatei geschrieben werden. rici vor 10 Jahren 0
Mangeln, Murmeln ist für mich kein Problem. William Entriken vor 10 Jahren 0

1 Antwort auf die Frage

3
Ole Tange
cat URLS | parallel -k -P10 curl >> OUTPUT 

oder wenn Fortschritt wichtiger ist:

cat URLS | parallel -k -P10 --eta curl >> OUTPUT 

oder:

cat URLS | parallel -k -P10 --progress curl >> OUTPUT 

Bei der 10-Sekunden-Installation wird eine vollständige Installation versucht. wenn dies fehlschlägt, eine persönliche Installation; Wenn dies fehlschlägt, eine minimale Installation.

wget -O - pi.dk/3 | sh 

Sehen Sie sich das Intro-Video für eine schnelle Einführung an: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Ich hatte diesen Installer `wget -O - pi.dk/3 | ausprobiert sh` scheint aber eine lahme Ausrede für Parallele zu haben, die wirklich nichts bewirkt: `parallel [OPTIONS] command - arguments / für jedes Argument, Befehl mit Argument parallel ausführen William Entriken vor 10 Jahren 0
Ah, ich musste moreutils zuerst deinstallieren. "apt-get remove moreutils" William Entriken vor 10 Jahren 1