GNU/Linux >> Linux Esercitazione >  >> Linux

scaricare il file tramite http solo se modificato dall'ultimo aggiornamento

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

Linux
  1. È possibile scaricare file estremamente grandi in modo intelligente o in parti tramite Ssh da Linux a Windows?

  2. Come usare wget per scaricare file tramite proxy

  3. Come creare un file solo se non esiste?

  4. aggiungi riga a un file SOLO se non è già nel file

  5. Collega il file .so al file .cpp tramite la compilazione g++

Zsync:un'utilità di trasferimento file per scaricare solo le nuove parti di un file

Come scaricare file utilizzando Wget tramite proxy in Linux

Come scaricare solo audio utilizzando youtube-dl

Come scaricare file di grandi dimensioni tramite File Manager

sposta solo se il file esiste in uno script di shell

Invio file tramite netcat