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

Antworten:


227

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


@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.


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


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


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

Dabei ist list.txt Ihre Listendatei


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

1

Linkdatei links.txt

Befehl zum Herunterladen aller Links

cat links.txt | wget -i

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.

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.