Erwägen Sie die Verwendung von curl
statt wget
:
curl -o "$file" -z "$file" "$uri"
man curl
sagt:
-z
/--time-cond
(HTTP/FTP) Fordern Sie eine Datei an, die nach dem angegebenen Zeitpunkt und Datum oder vor diesem Zeitpunkt geändert wurde. Der Datumsausdruck kann alle Arten von Datumszeichenfolgen sein, oder wenn er mit keinen internen übereinstimmt, versucht er stattdessen, die Zeit aus einem gegebenen Dateinamen zu bekommen.
Wenn $file
nicht unbedingt bereits vorhanden ist, müssen Sie den -z
verwenden Flag bedingt, mit test -e "$file"
:
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
(Beachten Sie, dass wir die Erweiterung von $zflag
nicht zitieren hier, da wir wollen, dass es auf 0 oder 2 Token aufgeteilt wird).
Wenn Ihre Shell Arrays unterstützt (z. B. Bash), haben wir eine sicherere und sauberere Version:
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
Der wget-Schalter -N
erhält die Datei nur, wenn sie sich geändert hat, daher wäre ein möglicher Ansatz, den einfachen -N
zu verwenden switch, der die Datei bei Bedarf abruft, sie aber mit dem falschen Namen belässt. Erstellen Sie dann einen festen Link mit dem ln -P
Befehl, um es mit einer "Datei" mit dem richtigen Namen zu verknüpfen. Die verknüpfte Datei hat dieselben Metadaten wie das Original.
Die einzige Einschränkung besteht darin, dass Sie keine festen Links über Dateisystemgrenzen hinweg haben können.
Python 3.5+ Skript zum Umschließen des Curl-Befehls:
import argparse
import pathlib
from subprocess import run
from itertools import chain
parser = argparse.ArgumentParser()
parser.add_argument('url')
parser.add_argument('filename', type=pathlib.Path)
args = parser.parse_args()
run(chain(
('curl', '-s', args.url),
('-o', str(args.filename)),
('-z', str(args.filename)) if args.filename.exists() else (),
))