Envisagez d'utiliser curl
au lieu de wget
:
curl -o "$file" -z "$file" "$uri"
man curl
dit :
-z
/--time-cond
(HTTP/FTP) Demander un fichier qui a été modifié après l'heure et la date indiquées, ou un fichier qui a été modifié avant cette heure. L'expression de date peut être toutes sortes de chaînes de date ou si elle ne correspond à aucune chaîne interne, elle essaie à la place d'obtenir l'heure à partir d'un nom de fichier donné.
Si $file
n'existe pas nécessairement, vous devrez utiliser le -z
indicateur conditionnel, en utilisant test -e "$file"
:
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
(Notez que nous ne citons pas l'expansion de $zflag
ici, car nous voulons qu'il soit divisé en 0 ou 2 jetons).
Si votre shell prend en charge les tableaux (par exemple, Bash), nous avons une version plus sûre et plus propre :
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
Le commutateur wget -N
n'obtient le fichier que s'il a changé, donc une approche possible serait d'utiliser le simple -N
switch qui obtiendra le fichier si nécessaire mais le laisse avec le mauvais nom. Créez ensuite un lien physique en utilisant le ln -P
commande pour le lier à un "fichier" avec le nom correct. Le fichier lié a les mêmes métadonnées que l'original.
La seule limitation étant que vous ne pouvez pas avoir de liens physiques au-delà des limites du système de fichiers.
Script Python 3.5+ pour envelopper la commande curl :
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 (),
))