Considere usar curl
en lugar de wget
:
curl -o "$file" -z "$file" "$uri"
man curl
dice:
-z
/--time-cond
(HTTP/FTP) Solicitar un archivo que haya sido modificado después de la hora y fecha indicadas, o uno que haya sido modificado antes de esa hora. La expresión de fecha puede ser todo tipo de cadenas de fecha o, si no coincide con ninguna interna, intenta obtener la hora de un nombre de archivo dado.
Si $file
no necesariamente preexiste, deberá utilizar el -z
bandera condicional, usando test -e "$file"
:
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
(Tenga en cuenta que no citamos la expansión de $zflag
aquí, ya que queremos que se divida en 0 o 2 tokens).
Si su shell admite matrices (por ejemplo, Bash), tenemos una versión más segura y limpia:
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
El interruptor wget -N
solo obtiene el archivo si ha cambiado, por lo que un posible enfoque sería usar el simple -N
switch que obtendrá el archivo si es necesario, pero lo deja con el nombre incorrecto. A continuación, cree un enlace fijo utilizando el ln -P
comando para vincularlo a un "archivo" con el nombre correcto. El archivo vinculado tiene los mismos metadatos que el original.
La única limitación es que no puede tener enlaces duros a través de los límites del sistema de archivos.
Script de Python 3.5+ para envolver el 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 (),
))