GNU/Linux >> Tutoriels Linux >  >> Linux

télécharger le fichier via http uniquement s'il a été modifié depuis la dernière mise à jour

Envisagez d'utiliser curl au lieu de wget :

curl -o "$file" -z "$file" "$uri"

man curl dit :

-z /--time-cond

(HTTP/FTP) Demander un fichier qui a été modifié après l'heure et la date indiquées, ou un fichier qui a été modifié avant cette heure. L'expression de date peut être toutes sortes de chaînes de date ou si elle ne correspond à aucune chaîne interne, elle essaie à la place d'obtenir l'heure à partir d'un nom de fichier donné.

Si $file n'existe pas nécessairement, vous devrez utiliser le -z indicateur conditionnel, en utilisant test -e "$file" :

if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"

(Notez que nous ne citons pas l'expansion de $zflag ici, car nous voulons qu'il soit divisé en 0 ou 2 jetons).

Si votre shell prend en charge les tableaux (par exemple, Bash), nous avons une version plus sûre et plus propre :

if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"

Le commutateur wget -N n'obtient le fichier que s'il a changé, donc une approche possible serait d'utiliser le simple -N switch qui obtiendra le fichier si nécessaire mais le laisse avec le mauvais nom. Créez ensuite un lien physique en utilisant le ln -P commande pour le lier à un "fichier" avec le nom correct. Le fichier lié a les mêmes métadonnées que l'original.

La seule limitation étant que vous ne pouvez pas avoir de liens physiques au-delà des limites du système de fichiers.


Script Python 3.5+ pour envelopper la commande 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. Comment rediriger uniquement Stderr ?

  2. Une commande pour imprimer uniquement les 3 derniers caractères d'une chaîne ?

  3. Ajouter du texte à tous les fichiers d'un dossier ?

  4. Est-il possible de télécharger des fichiers extrêmement volumineux intelligemment ou en plusieurs parties via Ssh de Linux vers Windows ?

  5. Trouver uniquement certaines chaînes (domaine) Extraire un autre fichier ?

Zsync - Un utilitaire de transfert de fichiers pour télécharger uniquement les nouvelles parties d'un fichier

Comment télécharger un fichier à l'aide de Wget via un proxy sous Linux

Comment télécharger de l'audio uniquement avec youtube-dl

Comment télécharger des fichiers volumineux via le gestionnaire de fichiers

Envoi de fichier via netcat

sauvegarde en temps réel si fichier modifié ?