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 (),
))