Wie lade ich mit wget / curl alle Links zu ZIP-Dateien auf einer bestimmten Webseite herunter?

83

Eine Seite enthält Links zu einer Reihe von ZIP-Dateien, die ich alle herunterladen möchte. Ich weiß, dass dies durch Wget und Curl geschehen kann. Wie wird es gemacht?

uyetch
quelle

Antworten:

125

Der Befehl lautet:

wget -r -np -l 1 -A zip http://example.com/download/

Optionen Bedeutung:

-r,  --recursive          specify recursive download.
-np, --no-parent          don't ascend to the parent directory.
-l,  --level=NUMBER       maximum recursion depth (inf or 0 for infinite).
-A,  --accept=LIST        comma-separated list of accepted extensions.
kreativ
quelle
16
Das -ndFlag (keine Verzeichnisse) ist praktisch, wenn keine zusätzlichen Verzeichnisse erstellt werden sollen (dh alle Dateien befinden sich im Stammordner).
Steve Davis
1
Wie kann ich diese Lösung optimieren, damit sie von der angegebenen Seite aus tiefer geht? Ich habe versucht -l 20, aber wget hört sofort auf.
Schraubenschlüssel
2
Wenn sich die Dateien nicht im selben Verzeichnis wie die Start-URL befinden, müssen Sie sie möglicherweise entfernen -np. Wenn sie sich auf einem anderen Host befinden, benötigen Sie --span-host.
Dan
84

Die obige Lösung funktioniert bei mir nicht. Bei mir funktioniert nur dieser:

wget -r -l1 -H -t1 -nd -N -np -A.mp3 -erobots=off [url of website]

Optionen Bedeutung:

-r            recursive
-l1           maximum recursion depth (1=use only this directory)
-H            span hosts (visit other hosts in the recursion)
-t1           Number of retries
-nd           Don't make new directories, put downloaded files in this one
-N            turn on timestamping
-A.mp3        download only mp3s
-erobots=off  execute "robots.off" as if it were a part of .wgetrc
K.-Michael Aye
quelle
ja dank! Ich erinnerte mich nicht, woher es kam, habe es nur in meinen Skripten liegen.
K.-Michael Aye
Ich weiß es nicht, sorry. eine neue Frage stellen! ;)
K.-Michael Aye
1
+1 für den -HSchalter. Dies hat verhindert, dass die erste Antwort (die ich vor dem Betrachten von SO ausprobiert habe) funktioniert.
Alex
Ich erhalte den Fehler "Obligatorische Argumente für lange Optionen sind auch für kurze Optionen obligatorisch". :(
François Leblanc
6

Für andere Szenarien mit paralleler Magie verwende ich:

curl [url] | grep -i [filending] | sed -n 's/.*href="\([^"]*\).*/\1/p' |  parallel -N5 wget -
M Lindblad
quelle