GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Datei nur dann über http herunterladen, wenn sie sich seit dem letzten Update geändert hat

Erwägen Sie die Verwendung von curl statt wget :

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

man curl sagt:

-z /--time-cond

(HTTP/FTP) Fordern Sie eine Datei an, die nach dem angegebenen Zeitpunkt und Datum oder vor diesem Zeitpunkt geändert wurde. Der Datumsausdruck kann alle Arten von Datumszeichenfolgen sein, oder wenn er mit keinen internen übereinstimmt, versucht er stattdessen, die Zeit aus einem gegebenen Dateinamen zu bekommen.

Wenn $file nicht unbedingt bereits vorhanden ist, müssen Sie den -z verwenden Flag bedingt, mit test -e "$file" :

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

(Beachten Sie, dass wir die Erweiterung von $zflag nicht zitieren hier, da wir wollen, dass es auf 0 oder 2 Token aufgeteilt wird).

Wenn Ihre Shell Arrays unterstützt (z. B. Bash), haben wir eine sicherere und sauberere Version:

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

Der wget-Schalter -N erhält die Datei nur, wenn sie sich geändert hat, daher wäre ein möglicher Ansatz, den einfachen -N zu verwenden switch, der die Datei bei Bedarf abruft, sie aber mit dem falschen Namen belässt. Erstellen Sie dann einen festen Link mit dem ln -P Befehl, um es mit einer "Datei" mit dem richtigen Namen zu verknüpfen. Die verknüpfte Datei hat dieselben Metadaten wie das Original.

Die einzige Einschränkung besteht darin, dass Sie keine festen Links über Dateisystemgrenzen hinweg haben können.


Python 3.5+ Skript zum Umschließen des Curl-Befehls:

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. Wie leite ich nur Stderr um?

  2. Ein Befehl zum Drucken nur der letzten 3 Zeichen einer Zeichenfolge?

  3. Text allen Dateien in einem Ordner voranstellen?

  4. Wie erstelle ich eine Datei nur, wenn sie nicht existiert?

  5. Parameter für den parallelen Download von Aria2c

Zsync – Ein Dateiübertragungsprogramm, um nur die neuen Teile einer Datei herunterzuladen

So laden Sie eine Datei mit Wget über Proxy in Linux herunter

So laden Sie nur Audio mit youtube-dl herunter

So laden Sie große Dateien über den Dateimanager herunter

Echtzeit-Backup bei Dateiänderung?

Grep in einer riesigen Logdatei (>14 GB) nur die letzten x GB?