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.