wget-Frage - (Umbenannte) Datei nur herunterladen, wenn sie aktueller ist.

Petronius

Cadet 3rd Year
Registriert
Nov. 2012
Beiträge
33
Hallo Leute,

könnt Ihr mir eventuell bei folgendem Problem helfen:

Ich lade mit einer einfachen Batchdatei und wget gelegentlich diverse Dateien herunter und benenne diese dann gleich in für mich persönlich sinnvollere Namen um, z.B.:

Code:
REM Aktuelle Defs herunterladen
c:\wget.exe -O"c:\temp\Spybot-Defs - %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.exe" http://www.safer-networking.org/updates/files/spybotsd_includes.exe

Da das Herunterladen (mit zunehmender Anzahl der Dateien) inzwischen ziemlich lange dauert, wollte ich den Download-Befehl so ergänzen, dass er nur dann ausgeführt wird, wenn die jeweils herunterzuladende Datei inzwischen aktueller ist, als meine bereits vorhandene Datei.

Anscheinend soll das mit der Funktion "Timestamping" gehen. Wenn ich jedoch meinen Befehl um den Schalter "-N" ergänze, dann erhalte ich folgende Fehlermeldung:

WARNING: timestamping does nothing in combination with -O. See the manual for details.
Wenn ich das "manual" richtig verstanden habe, funktioniert das Timestamping mit wget nur dann, wenn die zu prüfende Datei auf meiner Festplatte noch den Original-Namen hat, was mir aber leider nichts bringt. Ferner habe ich vermutlich deshalb auch keine Möglichkeit gefunden, wie man wget sagt, mit welcher Datei das "Timestamping" verglichen werden soll. Da ich hier im Forum und auch im Internet leider keine weiteren für mich brauchbaren Hinweise gefunden habe, wende ich mich an Euch.

Kennt zufällig jemand einen Weg oder einen passenden Link, mit dem man das Problem lösen kann. Falls es mit wget nicht geht, gerne auch mit einem alternativen Tool. Für Eure Mühe vielen Dank im Voraus.
 
Zuletzt bearbeitet: (Rechtschreibfehler)
Ich wüsste erst mal selber gerne eine Alternative zu WGET…
FTP ist mir wahrhaft vorsintflutlich unhandlich, verglichen mit allein DOS

Jedenfalls hast du die Lage klar korrekt analysiert: es kann nur gegen die Originaldatei (deren Name) verglichen werden. -O ist da tödlich.

Als dümmsten Workaround hätte ich nur vorzuschlagen die Zieldatei auf den Quellnamen umzubenennen, -N machen zu lassen und dann wieder zurückumzubenennen.

CN8
 
Hallo cumulonimbus8,

vielen Dank für Deinen Beitrag.

cumulonimbus8 schrieb:
Als ... Workaround hätte ich nur vorzuschlagen die Zieldatei auf den Quellnamen umzubenennen, -N machen zu lassen und dann wieder zurückumzubenennen.
Den Vorschlag finde ich gar nicht schlecht. Er ist sogar recht naheliegend - wie so oft, ist man für die einfachen Lösungsansätze schlicht "betriebsblind".

Allerdings ergeben sich auch hier wieder ein paar neue Fragen.
Wenn man z.B. mehrere Versionen der herunterzuladenden Datei im gleichen Verzeichnis hat (z.B. "Musterdatei 2013-02-15.exe" und "Musterdatei 2013-02-28.exe"), wie kann man den rename-Befehl dann speziell und nur auf die aktuellere Datei anwenden? Wie merkt sich die Batch-Datei den bisherigen Namen? Kann man mit einer Batch-Datei irgendwie auf die Datei-Infos einer Datei (z.B. Größe, Version und insbesondere auf den Originaldateinamen) zugreifen?

Unabhängig von diesen neuen Fragen, klingt Dein Workaround aber auf jeden Fall realisierbar - nochmal Danke für den Tipp.

cumulonimbus8 schrieb:
Ich wüsste erst mal selber gerne eine Alternative zu WGET
Ein Bekannter hat jetzt noch AutoIT und Download.exe ins Spiel gebracht. Damit könne man auch Dateien per Batch oder Skript herunterladen. Ob diese Tools jedoch eine Art "Timestamping"-Funktion haben, wusste er leider nicht. Vielleicht hat ja jemand zu diesen oder anderen Tools noch ein paar Tipps oder Hinweise.
 
curl wäre eine Alternative.
Da gibt's den Parameter --remote-time bzw. -R, wo er der runtergeladenen Datei denselben Zeitstempel verpasst, wie sie online vorliegt. Das geht aber nur, wenn der Webserver einen Timestamp mitliefert.
Mit -z bzw. --time-cond kann man eine Datei angeben, von der er sich den Timestamp holt und nur dann runterlädt, wenn der Onlinetime-Stamp neuer ist.

Das klingt ziemlich danach, was du suchst.
 
Hallo e-Laurin,

e-Laurin schrieb:
Das klingt ziemlich danach, was du suchst.

das hört sich wirklich sehr gut an. Vielen Dank für den Hinweis.

Ich habe das Tool eben mal mit folgender Syntax getestet:

Code:
curl -z "Alte Vergleichsdatei" -R -o "Neue Datei" "URL"

Bezogen auf mein obiges Beispiel habe ich mal die aktuelle "spybotsd_includes.exe" mit dem Parameter -R heruntergeladen und in "Spybot-Defs - 2013-03-04.exe" umbenannt.

Anschließend habe ich folgendes Skript ausgeführt:

Code:
REM Aktuelle Defs herunterladen
c:\Temp\curl-7.29.0\curl.exe -z "c:\temp\Spybot-Defs - 2013-03-04.exe" -R -o "c:\temp\Spybot-Defs - %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.exe" http://www.safer-networking.org/updates/files/spybotsd_includes.exe

Und tatsächlich - curl hat den Download nicht durchgeführt, da die angefragte Datei ja nicht aktueller ist.

Daraufhin habe ich die Datei "Spybot-Defs - 2013-03-04.exe" durch eine ältere Version ersetzt und das Skript nochmals gestartet - und curl hat den Download der diesmal aktuelleren Datei durchgeführt und sie als "Spybot-Defs - 2013-03-07.exe" gespeichert - super. Im Prinzip also genau das, was ich möchte.

Allerdings möchte ich natürlich nicht jedes Mal den Vergleichsdatei-Namen manuell im Skript ändern. Daher habe ich die "Spybot-Defs - 2013-03-07.exe" wieder gelöscht und die Vergleichsdatei im Skript mit einem Platzhalter versehen "Spybot-Defs - %DATE:~6,4%*.exe":

Code:
REM Aktuelle Defs herunterladen
c:\Temp\curl-7.29.0\curl.exe -z "c:\temp\Spybot-Defs - %DATE:~6,4%*.exe" -R -o "c:\temp\Spybot-Defs - %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.exe" http://www.safer-networking.org/updates/files/spybotsd_includes.exe

Leider erscheint dann folgende Fehlermeldung:

c:\Temp>c:\Temp\curl-7.29.0\curl.exe -z "c:\temp\Spybot-Defs - 2013*.exe" -R -o
"c:\temp\Spybot-Defs - 2013-03-07.exe" http://www.safer-networking.org/updates/f
iles/spybotsd_includes.exe
Warning: Illegal date format for -z, --timecond (and not a file name).
Warning: Disabling time condition. See curl_getdate(3) for valid date syntax.
Was mache ich hier falsch?
 
Nun ja, er kann "c:\temp\Spybot-Defs - 2013*.exe" nicht interpretieren.
Eventuell kann man da etwas mit PowerShell machen, aber davon habe ich zu wenig Ahnung.
 
e-Laurin schrieb:
Nun ja, er kann "c:\temp\Spybot-Defs - 2013*.exe" nicht interpretieren.
Hallo e-Laurin,

genau so war es. Wenn man den vollständigen Dateinamen aber zuerst in eine Variable einlesen lässt, dann funktioniert es.

Bei mir scheint - bezogen auf mein obiges Beispiel - folgendes Skript zu funktionieren:
Code:
set Downloadverzeichnis=C:\Temp\
set DownloadURL=http://www.safer-networking.org/updates/files/spybotsd_includes.exe
set NeueDatei=Spybot-Defs - %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.exe

rem Aktuellste Vergleichsdatei ermitteln (= Datei mit hoechstem Datum oder mit hoechster Versionsnummer)
for /f "usebackq tokens=1 delims=" %%i IN (`dir spybot*defs*2013*.* /b`) do set Vergleichsdatei=%%i

c:\Temp\curl-7.29.0\curl.exe -z "%Downloadverzeichnis%%Vergleichsdatei%" -R -o "%Downloadverzeichnis%%NeueDatei%" %DownloadURL%

Das geht sicherlich noch eleganter - für weitere Hinweise / Verbesserungsvorschläge bin ich natürlich weiterhin offen.

Ansonsten wäre das Thema aber im Moment für mich gelöst. Für Eure Hilfe nochmals vielen, vielen Dank. :)

----------------------------------------

PS:
Jetzt hätte ich doch noch eine Frage an die Moderatoren:
Wie kann man denn ein Thema hier auf "GELÖST" setzen bzw. die Themenüberschrift um ein [GELÖST] ergänzen?
 
Zuletzt bearbeitet:
Zurück
Oben