Download überspringen, wenn Dateien in wget vorhanden sind?


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

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.


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.


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.


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