Zvažte použití curl místo wget :
curl -o "$file" -z "$file" "$uri"
man curl říká:
-z/--time-cond(HTTP/FTP) Vyžádejte si soubor, který byl změněn později než zadaný čas a datum, nebo soubor, který byl změněn před tímto časem. Výraz data může být nejrůznější datové řetězce, nebo pokud se neshoduje s žádným interním, pokusí se místo toho získat čas z daného názvu souboru.
Pokud $file nemusí nutně existovat, budete muset použít -z podmíněný příznakem pomocí test -e "$file" :
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
(Všimněte si, že necitujeme rozšíření $zflag zde, protože chceme, aby prošel rozdělením na 0 nebo 2 tokeny).
Pokud váš shell podporuje pole (např. Bash), pak máme bezpečnější a čistší verzi:
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
Přepínač wget -N soubor získá pouze v případě, že se změnil, takže možným přístupem by bylo použití jednoduchého -N přepínač, který v případě potřeby soubor získá, ale ponechá jej se špatným názvem. Poté vytvořte pevný odkaz pomocí ln -P příkaz k propojení se „souborem“ se správným názvem. Propojený soubor má stejná metadata jako originál.
Jediným omezením je, že nemůžete mít pevné odkazy přes hranice systému souborů.
Skript Pythonu 3.5+ pro zalomení příkazu 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 (),
))