Download überspringen, wenn Dateien in wget vorhanden sind?

198

Dies ist das einfachste Beispiel für die Ausführung von wget:

wget http://www.example.com/images/misc/pic.png

aber wie macht man wget überspringen download wenn pic.pnges schon verfügbar ist?

nais inpoh gan
quelle

Antworten:

269

Versuchen Sie den folgenden Parameter:

-nc, --no-clobber: Downloads überspringen, die in vorhandene Dateien heruntergeladen werden.

Beispielnutzung:

wget -nc http://example.com/pic.png
Plundra
quelle
34
-ncverhindert nicht das Senden der HTTP-Anfrage und das anschließende Herunterladen der Datei. Nach dem Herunterladen der Datei wird einfach nichts unternommen, wenn die Datei bereits vollständig abgerufen wurde. Gibt es eine Möglichkeit, die HTTP-Anforderung zu verhindern, wenn die Datei bereits vorhanden ist? stackoverflow.com/questions/33203898/…
ma11hew28
8
Wie in der verknüpften Frage erwähnt, bin ich anderer Meinung - Wenn kein Clobber verwendet wird und der Dateiname vorhanden ist, wird er beendet. Keine HEAD-Anfrage. Auch wenn dies nicht der Fall war, überprüfen Sie, ob Sie zunächst eine Datei haben :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra
3
Ich glaube, ich erhalte möglicherweise andere Ergebnisse, weil ich die --recursiveOption verwende.
ma11hew28
197

Die -nc, --no-clobberOption ist nicht die beste Lösung , wenn neuere Dateien nicht heruntergeladen werden. Man sollte -Nstattdessen verwenden, wodurch die Datei nur heruntergeladen und überschrieben wird, wenn der Server eine neuere Version hat. Die richtige Antwort lautet also:

wget -N http://www.example.com/images/misc/pic.png

Wenn Sie dann Wget mit -N ausführen, mit oder ohne -roder -p, hängt die Entscheidung, ob eine neuere Kopie einer Datei heruntergeladen werden soll oder nicht, vom lokalen und Remote-Zeitstempel und der Größe der Datei ab. -ncdarf nicht gleichzeitig mit angegeben werden -N.

-N, --timestamping: Zeitstempel einschalten.

Daniel Sokolowski
quelle
39
Wenn der Server nicht richtig konfiguriert ist, -Nkann dies zu einem Ausfall führen und wget wird immer wieder heruntergeladen. Also manchmal -ncist bessere Lösung.
Benutzer
2
Was könnte das anwendbare Szenario sein, in dem "Wenn der Server nicht richtig konfiguriert ist" auftreten würde?
AjayKumarBasuthkar
Wenn Sie von einem kopierten Speicherort herunterladen und alle Zeitstempel ändern.
Robert
Ob dies am besten ist, hängt vom Kontext ab. Zum Beispiel lade ich ~ 1600 Dateien von einer Liste herunter und aktualisiere dann die Liste, um einige weitere Dateien aufzunehmen. Die Dateien ändern sich nicht, daher ist mir die neueste Version egal und ich möchte nicht, dass der Server auf neue Versionen der bereits vorhandenen 1600-Dateien überprüft wird.
JBentley
2
@ AjayKumarBasuthkar: Wenn der Server keine Möglichkeit unterstützt, nach neueren Dateien zu suchen, wgetwird er sich beschweren Last-modified header missing. Dies ist genau die beschriebene Situation.
Piskvor verließ das Gebäude
23

Bei der Ausführung von Wget mit -roder -paber ohne -N, -ndoder -nc, Wieder Herunterladen einer Datei wird in die neue Kopie führen einfach die alte überschrieben werden .

Durch Hinzufügen -ncwird dieses Verhalten verhindert, und stattdessen wird die Originalversion beibehalten und neuere Kopien auf dem Server werden ignoriert.

Weitere Informationen finden Sie bei GNU.

Mahesh
quelle
18

Die Antwort, nach der ich gesucht habe, ist https://unix.stackexchange.com/a/9557/114862 .

Wenn Sie das -cFlag verwenden, wenn die lokale Datei größer oder gleich groß wie die Serverversion ist, wird ein erneutes Herunterladen vermieden.

jsta
quelle
1
Dies ist besonders gut, wenn Sie eine Reihe von Dateien mit dem Flag -i herunterladen. wget -i filelist.txt -csetzt einen fehlgeschlagenen Download einer Liste von Dateien fort.
Trevor