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