Prendi in considerazione l'utilizzo di curl
invece di wget
:
curl -o "$file" -z "$file" "$uri"
man curl
dice:
-z
/--time-cond
(HTTP/FTP) Richiedere un file che è stato modificato dopo l'ora e la data specificate o uno che è stato modificato prima di tale ora. L'espressione della data può essere di tutti i tipi di stringhe di date o, se non corrisponde a nessuna stringa interna, cerca invece di ottenere l'ora da un determinato nome di file.
Se $file
non necessariamente preesiste, dovrai utilizzare il -z
flag condizionale, usando test -e "$file"
:
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
(Notare che non citiamo l'espansione di $zflag
qui, poiché vogliamo che subisca la suddivisione in 0 o 2 token).
Se la tua shell supporta gli array (ad esempio Bash), allora abbiamo una versione più sicura e pulita:
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
L'interruttore wget -N
ottiene il file solo se è cambiato, quindi un possibile approccio sarebbe usare il semplice -N
switch che otterrà il file se necessario ma lo lascia con il nome sbagliato. Poi crea un hard link usando il ln -P
comando per collegarlo a un "file" con il nome corretto. Il file collegato ha gli stessi metadati dell'originale.
L'unica limitazione è che non puoi avere hard link oltre i confini del file system.
Script Python 3.5+ per avvolgere il comando 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 (),
))