GNU/Linux >> Znalost Linux >  >> Linux

stáhnout soubor přes http pouze v případě, že se změnil od poslední aktualizace

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

Linux
  1. Přidat text před všechny soubory ve složce?

  2. Najít pouze určité řetězce (doména) Rozbalit jiný soubor?

  3. Jak vytvořit soubor, pouze pokud neexistuje?

  1. Parametry paralelního stahování Aria2c

  2. Odeslání souboru přes netcat

  3. záloha v reálném čase, pokud se soubor změnil?

  1. Jak přesměrovat pouze Stderr?

  2. Příkaz pro tisk pouze posledních 3 znaků řetězce?

  3. Grep v obrovském souboru protokolu (>14 GB) pouze posledních x GB?