Wenn ich wget zweimal ausführe, erkennt es nicht, dass es diese Datei bereits heruntergeladen hat, und erstellt eine neue. Gibt es eine Möglichkeit, das erneute Herunterladen der Datei zu verhindern?
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...
(Ich benutze gerne curl oder eine ähnliche skriptfähige Alternative, wenn wget das nicht kann.)
Antworten:
Ich schlage vor, Sie verwenden die
-N
Option.Es aktiviert die Zeitstempelung, bei der die Datei nur dann erneut heruntergeladen wird, wenn sie auf dem Server neuer ist als die heruntergeladene Version.
Caveat (von KasiyA Kommentar)
Wenn der Server nicht ordnungsgemäß konfiguriert ist, wird möglicherweise immer gemeldet, dass die Datei neu ist, und die Datei
-N
wird immer erneut heruntergeladen. In diesem Fall-nc
ist wahrscheinlich eine bessere Option.quelle
-N
kann dies fehlschlagen und wget wird immer neu heruntergeladen. So ist manchmal-nc
besser als-N
Ja, es ist eine
-c
Option.Wenn die Datei identisch ist, wird der zweite Download-Versuch abgebrochen.
Vorsichtsmaßnahmen (aus Jofels Kommentaren)
Wenn sich die Datei auf dem Server geändert hat, kann die
-c
Option zu falschen Ergebnissen führen.Mit
-c
fragt wget einfach den Server nach Daten, die über den Teil der bereits heruntergeladenen Datei hinausgehen, sonst nichts. Es wird nicht überprüft, ob Änderungen an dem bereits heruntergeladenen Teil der Datei vorgenommen wurden. So könnten Sie eine beschädigte Datei, die eine Mischung aus der alten und der neuen Datei ist.Lokaler Test
Sie können es testen , indem Sie einfach lokalen Web-Server ausgeführt werden, wie folgend (Dank @roadmr ‚s Antwort ):
Öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:
Jetzt öffne ein anderes Terminal und mache:
Beachten Sie, dass dies
filename-to-download
die Datei ist, in/path/to/parent-download-dir/
die wir sie herunterladen möchten.Wenn Sie nun den Befehl wget mehrmals ausführen, wird Folgendes angezeigt:
OK, gehen Sie jetzt in das
/path/to/parent-download-dir/
Verzeichnis und fügen Sie der Quelldatei etwas hinzu. Wenn es sich beispielsweise um eine Textdatei handelt, fügen Sie eine einfache zusätzliche Zeile hinzu und speichern Sie die Datei. Versuchen Sie es jetzt mitwget -c ...
. Gut, jetzt sehen Sie, dass die Datei erneut heruntergeladen wird, aber Sie haben sie bereits zuvor heruntergeladen.Grund: Warum erneut herunterladen?
weil seine Größe zu einer größeren Größe geändert wurde als die alte heruntergeladene Datei und sonst nichts.
quelle
-nc
nicht wie du gesagt hast, aber die-c
Option wird funktionieren und deshalb habe ich die-c
Option zuerst erwähnt.-c
,wget
fragt den Server für alle Daten über den Teil der bereits heruntergeladenen Datei, sonst nichts. Es wird nicht geprüft, ob zwischenzeitlich Änderungen an dem bereits heruntergeladenen Teil der Datei auf dem Server vorgenommen wurden. Im schlimmsten Fall erhalten Sie eine beschädigte Datei, die eine Mischung aus der alten und der neuen Datei darstellt.Es gibt auch eine andere Option
-nc
für das Wgetting:Wenn die
-nc
Option angegeben ist, verweigert Wget das Herunterladen von Kopien derselben Datei. Wenn Sie dieselbe Dateiwget
heruntergeladen haben, wird der Download verweigert, es sei denn, Sie benennen die lokale Datei um oder entfernen sie.Manchmal ist diese Option sehr gut und ich empfehle die
-nc
Option anstelle von beiden-c
oder,-N
weil diese Optionen die Download-Datei mit Ihrer lokalen Datei überschreiben, wenn sie den gleichen Namen haben.Caveat (von Jofel Kommentar)
Die
-nc
Option aktualisiert die Datei nicht, wenn sie sich auf dem Server geändert hat. Wenn Sie wissen, dass sich die Datei ändern wird, ist die-N
Option vorzuziehen. Wenn Sie wissen, dass sich die Datei nicht ändert (oder es Ihnen egal ist),-nc
ist dies in Ordnung.quelle
Ich weiß, dass dies eine spezielle Frage in Bezug auf wget war, aber das OP erwähnte "Ich bin froh, Curl oder eine ähnliche skriptfähige Alternative zu verwenden, wenn wget dies nicht kann." Ich bin mir nicht sicher, welche Anforderungen hier gestellt werden (mehrere Dateien, alte Version beibehalten, falls diese vom Original abweicht, durch neu heruntergeladene Version ersetzen). Abhängig davon, was Sie wollen und wie Sie mit Duplikaten umgehen möchten, benötigen Sie möglicherweise mehr als dies. Eine sehr einfache Möglichkeit, das zu tun, was Sie zu wollen scheinen, besteht darin, stattdessen einfach Locken zu verwenden.
Dieser Befehl ersetzt jedes Mal die alte Datei durch die neu heruntergeladene.
Geben Sie dies nicht auf dem Terminal aus (ohne "> [Dateiname]"), wenn Sie im Gegensatz zu Text eine Binärdatei herunterladen. Andernfalls kann es zu Problemen mit Ihrer Terminalsitzung kommen. Wenn Sie dies versehentlich tun, müssen Sie möglicherweise eine andere Shell- / Terminalsitzung öffnen.
quelle