Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.os.unix.linux.misc > #137650

Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen?

From Tim Landscheidt <tim@tim-landscheidt.de>
Newsgroups de.comp.os.unix.linux.misc
Subject Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen?
Date 2024-02-13 12:24 +0000
Organization https://www.tim-landscheidt.de/
Message-ID <87a5o45z75.fsf@vagabond.tim-landscheidt.de> (permalink)

Show all headers | View raw


Hi,

ich möchte regelmäßig kleine und große Dateien aus dem Web
atomar auffrischen, falls sie neu sind oder geändert wurden,
und in diesem Fall nach erfolgreichem Download einen Befehl
auslösen. Beispiel:
https://src.fedoraproject.org/repo/rpm-specs-latest.tar.xz
soll jeden Tag heruntergeladen und bei Änderung in
$directory entpackt werden.

Für die Eigenschaft der Änderung scheint der HTTP-Header
ETag der richtige Ansatzpunkt zu sein. Von meinen beiden
Hoflieferanten curl und wget scheint nur curl dieses mittels
--etag-compare und --etag-save zu beherrschen.

Problem: curl liefert den Rückgabewert 0 zurück sowohl für
den Fall, dass die Datei (bzw. dessen ETag-Header) geändert
wurde, als auch, falls gar nichts heruntergeladen wurde.

Das heißt, ich müsste bei --etag-compare und --etag-save
verschiedene Dateien angeben und deren Inhalt, falls curl
erfolgreich war, dann vergleichen und bei Unterschied dann
ETag-Datei und eigentliche Datei überschreiben und meinen
Befehl auslösen à la:

| origfile=/tmp/cfwu.rss
| origetag="${origfile}.etag"
| dldir="$(mktemp -d)"
| if curl -s --etag-compare "$origetag" --etag-save "$dldir/tmp.etag" -o "$dldir/tmp.rss" https://www.comeflywithus.de/feed/mp3/; then
|     if [ -s "$origetag" ] && cmp -s "$origetag" "$dldir/tmp.etag"; then
|         rm -f "$dldir/tmp.etag"
|     else
|         mv -f "$dldir/tmp.rss" "$origfile"
|         mv -f "$dldir/tmp.etag" "$origetag"
|         echo "Do something useful here."
|     fi
| fi
| rmdir "$dldir"

Das funktioniert, und dank des „-s“-Tests sogar für Webres-
sourcen, die keinen ETag-Header haben (auch wenn dann in je-
dem Fall der Befehl ausgelöst wird).

Aber das kann ja 2024 nicht der Stand der Technik sein :-).
Gibt es (für curl oder andere weit verbreitete Programme)
Möglichkeiten, das kürzer/einfacher/eleganter/one-liner-kom-
patibel zu formulieren?

Tim

Back to de.comp.os.unix.linux.misc | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Tim Landscheidt <tim@tim-landscheidt.de> - 2024-02-13 12:24 +0000
  Re: Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2024-02-13 19:24 +0000
    Re: Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Tim Landscheidt <tim@tim-landscheidt.de> - 2024-02-14 22:16 +0000
      Re: Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2024-02-15 09:32 +0000
        Re: Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Tim Landscheidt <tim@tim-landscheidt.de> - 2024-02-15 12:01 +0000
  Re: Web-Datei lokal zwischenspeichern, bei Änderung Befehl auslösen? Stefan Reuther <stefan.news@arcor.de> - 2024-02-15 18:26 +0100

csiph-web