Laden Sie Dateien von einer Liste herunter

130

Wie kann ich Dateien (die in einer Textdatei aufgelistet sind) mithilfe wgeteiner anderen automatischen Methode herunterladen ?

Beispieldateiliste:

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf
Sourav
quelle

Antworten:

227

wget hat eine eingebaute Flagge dafür: wget -i your_list Sie können solche Dinge durch Lesen findenman wget

aureianimus
quelle
@aureianimus wenn ich den link 2 überspringen will dann wie?
Alhelal
Diese Lösung hat bei mir funktioniert. Ich war zufrieden mit dem sequentiellen und nicht parallelen Download.
Asiby
85

Holen Sie sich diese parallel mit

cat urlfile | parallel --gnu "wget {}"

Standardmäßig werden so viele Prozesse ausgeführt, wie Kerne vorhanden sind. Sie können diese wahrscheinlich um das 10-fache erhöhen, wenn Sie sie wirklich schnell herunterfahren möchten, indem Sie nach parallel "-j 20" hinzufügen.

meawoppl
quelle
1
Ich kann es einfach nicht zum Laufen bringen. Ich sehe keinen Proc, das Echo für wget zu wechseln, gibt nichts aus
Jakub Bochenski
Einige frühere Ubuntus haben einen blöden Defekt in diesem Bereich: stackoverflow.com/questions/16448887/…
meawoppl
2
Beachten Sie, dass mit der Option "Es werden so viele Prozesse ausgeführt, wie Sie über Kerne verfügen" die Netzwerkbandbreite wahrscheinlich eher einschränkend ist.
Wilf
2
Es kommt wirklich darauf an. Für eine große Anzahl kleiner Dateien kann dies fast eine Größenordnung schneller sein, da der Großteil der Übertragungszeit auf dem Handshake / TCP-Roundtrip beruht. Auch in der Situation, in der Sie von einer Reihe kleinerer Hosts herunterladen, ist die Bandbreite pro Verbindung manchmal begrenzt, sodass dies zu Problemen führt.
Meawoppl
2
Dies ist sehr nützlich, wenn Sie eine Liste relativer URLs (Ressourcen-ID ohne Hostnamen) mit unterschiedlichen Hostnamen verwenden möchten, z. B. cat urlfile | parallel --gnu "wget example1.com {}" und cat urlfile | parallel --gnu "wget example2.com {}"
Mauricio Sánchez
10
xargs -i wget 'http://{}'  < your_list
Florian Diesch
quelle
9

parallelhat ein eingebautes Flag --arg-file( -a), das eine Eingabedatei als Quelle verwendet, so dass Sie vermeiden können cat |. Sie können verwenden

parallel --gnu -a urlfile wget

Oder einfach parallel --gnu wget < urlfile

yxogenium
quelle
5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

Dabei ist list.txt Ihre Listendatei

flo
quelle
4

Ich habe Florian Dieschs Antwort gesehen.

Ich habe es funktioniert, indem ich den Parameter bqcin den Befehl aufgenommen habe.

xargs -i wget -bqc 'http://{}' < download.txt

Alle Downloads begannen parallel im Hintergrund.

  • -b: Hintergrund. Gehen Sie sofort nach dem Start in den Hintergrund
  • -q: Ruhig. Schalten Sie die Ausgabe von wget aus
  • -c: Fortsetzen. Holen Sie sich weiterhin eine teilweise heruntergeladene Datei
Straßenleben
quelle
1

Linkdatei links.txt

Befehl zum Herunterladen aller Links

cat links.txt | wget -i
DreamCoder
quelle
3
Das funktioniert nicht. wget -i links.txtist der richtige Befehl.
Hery
Nein, das ist kein richtiger Befehl. Der richtige Befehl lautet: "cat links.txt | wget -i"
DreamCoder
0

Ich habe das gerade getestet:

xargs -a download_file -L1 wget

Für mich geht das. Links innerhalb der txt-Datei müssen in separaten Zeilen stehen.

Kyle Felipe
quelle