Ich muss eine Datei von einem HTTP-Server herunterladen, aber nur, wenn sie sich seit dem letzten Herunterladen geändert hat (z. B. über den If-Modified-Since
Header). Ich muss auch einen benutzerdefinierten Namen für die Datei auf meiner Festplatte verwenden.
Welches Tool kann ich für diese Aufgabe unter Linux verwenden?
wget -N
kann nicht verwendet werden, da -N
nicht mit verwendet werden kann -O
.
Antworten:
Erwägen Sie die Verwendung
curl
anstelle vonwget
:man curl
sagt:Wenn es
$file
das nicht unbedingt gibt, müssen Sie die Verwendung des-z
Flags unter folgenden Bedingungen festlegentest -e "$file"
:(Beachten Sie, dass wir die Erweiterung von
$zflag
hier nicht zitieren , da wir möchten, dass sie in 0 oder 2 Token aufgeteilt wird.)Wenn Ihre Shell Arrays (zB Bash) unterstützt, haben wir eine sicherere und sauberere Version:
quelle
Der wget-Schalter
-N
ruft die Datei nur ab, wenn sie geändert wurde. Ein möglicher Ansatz besteht darin, den einfachen-N
Schalter zu verwenden, der die Datei abruft, wenn dies erforderlich ist, sie jedoch mit dem falschen Namen belässt. Erstellen Sie dann eine feste Verknüpfung, indem Sie denln -P
Befehl verwenden, um sie mit einer "Datei" mit dem richtigen Namen zu verknüpfen. Die verknüpfte Datei enthält dieselben Metadaten wie das Original.Die einzige Einschränkung besteht darin, dass Sie keine festen Verknüpfungen über Dateisystemgrenzen hinweg haben können.
quelle
Python 3.5+-Skript zum Umschließen des Befehls curl:
quelle
chain
:)Ein ähnlicher Ansatz zur " Datumsprüfung " (mit "curl - time-cond") wäre das Herunterladen gemäß dem Dateigrößenvergleich, dh Herunterladen nur, wenn die lokale Datei eine andere Größe als die entfernte Datei hat .
Dies ist beispielsweise hilfreich, wenn der Download-Vorgang in der Mitte fehlgeschlagen ist und die lokal heruntergeladene Datei ein neueres Datum als die Remote-Datei erhält, aber tatsächlich beschädigt ist und ein erneuter Download erforderlich ist:
Die „curl -z / --time-cond“ Option (die in einer anderen Antwort vorgeschlagen wurde) nicht die Remote - Datei in diesem Fall herunterladen (Ursache der lokale Datei ein neueres Datum hat), aber dieses „ Größe Check “ Skript wird!
quelle