GNU/Linux >> Tutoriales Linux >  >> Linux

descargue el archivo a través de http solo si cambió desde la última actualización

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

Linux
  1. ¿Cómo redirigir solo Stderr?

  2. ¿Agregar texto a todos los archivos en una carpeta?

  3. Buscar solo ciertas cadenas (dominio) ¿Extraer otro archivo?

  4. ¿Cómo crear un archivo solo si no existe?

  5. agregue una línea a un archivo SOLAMENTE si aún no está en el archivo

Zsync:una utilidad de transferencia de archivos para descargar solo las partes nuevas de un archivo

Cómo descargar archivos usando Wget a través de Proxy en Linux

Cómo descargar solo audio usando youtube-dl

¿Un comando para imprimir solo los últimos 3 caracteres de una cadena?

¿Es posible descargar archivos extremadamente grandes de forma inteligente o en partes a través de Ssh desde Linux a Windows?

Cómo descargar archivos grandes a través del Administrador de archivos