Wget: wie kann man die korrekte übermittlung einer datei überrüfen?
guten tag
mit wget habe ich eine aufgabe:
c:\allegro\wget -Uich-bin-es -nc -Pc:\zdb --no-cache http://wer-auch-immer.de/datei.zzz
nur mal überflüssigerweise(?) erklärt:
-U gibt dem server bekannt: "ich-bin-es" -> eine art absenderstempel
-nc no clobber: bereits vorhandene dateien werden aktuell überschrieben, sonst bekommen wir mehrere fassungen
-P da soll das zeuchs landen
--no-cache : vergiss irgendwelche cache's: ziehe es aktuelle runter, egal was im cache ist
DAS problem:
wie kann ich erkennen, ob die datei "datei.zzz" komplett mit wget runtergezogen wurde?
ich glaube, es gibt keinen entsprechenden errorlevel.
diese levels sind mir bekannt:
2.12 Exit Status
Wget may return one of several error codes if it encounters problems.
No problems occurred.
1
Generic error code.
2
Parse error—for instance, when parsing command-line options, the ‘.wgetrc’ or ‘.netrc’...
3
File I/O error.
4
Network failure.
5
SSL verification failure.
6
Username/password authentication failure.
7
Protocol errors.
8
frage: wie soll wget erkennen, daß eine datei komplett ist?
sicherlich kann ich im nachhinein mit md5 arbeiten. wer's wissen will: es gibt ein commandozeilentool für win(auch 64bit) für md5 von
"MD5 1.1.24 (c) 2002-14 by Matthias Withopf"....
also nochmal: mein problem ist:
wie kann ich erkennen, daß bei wget.exe eine datei zu 100% sauber rüberkommt?
meine antworten derzeit sind:
1. ich kann erkennen, wenn wget mir KEINE datei liefert:
if not exist datei.zzz echo wget hats nicht gebracht
2a. ich kann -vermutlich- erkennen, wenn mir wget eine 160bytes-große datei liefert
man kann sicherlich abfragen: ist datei.zzz nicht größer als 160bytes echo die datei.zzz hat schrott zum inhalt!
2b. da man weiss, daß die datei eine mindestgröße haben muss, kann man sicherlich die abfrage bei 2a. auch so definieren: ist datei.zzz nicht größer als 1GB echo die datei.zzz ist nicht vollständig!
danke und gruß
vom klaus(i)
mit wget habe ich eine aufgabe:
c:\allegro\wget -Uich-bin-es -nc -Pc:\zdb --no-cache http://wer-auch-immer.de/datei.zzz
nur mal überflüssigerweise(?) erklärt:
-U gibt dem server bekannt: "ich-bin-es" -> eine art absenderstempel
-nc no clobber: bereits vorhandene dateien werden aktuell überschrieben, sonst bekommen wir mehrere fassungen
-P da soll das zeuchs landen
--no-cache : vergiss irgendwelche cache's: ziehe es aktuelle runter, egal was im cache ist
DAS problem:
wie kann ich erkennen, ob die datei "datei.zzz" komplett mit wget runtergezogen wurde?
ich glaube, es gibt keinen entsprechenden errorlevel.
diese levels sind mir bekannt:
2.12 Exit Status
Wget may return one of several error codes if it encounters problems.
No problems occurred.
1
Generic error code.
2
Parse error—for instance, when parsing command-line options, the ‘.wgetrc’ or ‘.netrc’...
3
File I/O error.
4
Network failure.
5
SSL verification failure.
6
Username/password authentication failure.
7
Protocol errors.
8
frage: wie soll wget erkennen, daß eine datei komplett ist?
sicherlich kann ich im nachhinein mit md5 arbeiten. wer's wissen will: es gibt ein commandozeilentool für win(auch 64bit) für md5 von
"MD5 1.1.24 (c) 2002-14 by Matthias Withopf"....
also nochmal: mein problem ist:
wie kann ich erkennen, daß bei wget.exe eine datei zu 100% sauber rüberkommt?
meine antworten derzeit sind:
1. ich kann erkennen, wenn wget mir KEINE datei liefert:
if not exist datei.zzz echo wget hats nicht gebracht
2a. ich kann -vermutlich- erkennen, wenn mir wget eine 160bytes-große datei liefert
man kann sicherlich abfragen: ist datei.zzz nicht größer als 160bytes echo die datei.zzz hat schrott zum inhalt!
2b. da man weiss, daß die datei eine mindestgröße haben muss, kann man sicherlich die abfrage bei 2a. auch so definieren: ist datei.zzz nicht größer als 1GB echo die datei.zzz ist nicht vollständig!
danke und gruß
vom klaus(i)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 256051
Url: https://administrator.de/contentid/256051
Ausgedruckt am: 14.11.2024 um 17:11 Uhr
7 Kommentare
Neuester Kommentar
Hi
Das wäre auch der übliche weg. Der Erzeuger der Datei legt zu datei.zzz noch eine datei.zzz.md5 oder datei.zzz.sha mit dem von ihm lokal auf seinem Rechner erzeugten Hash ab.
Damit wird inherent nicht nur dein Herunterladen überprüft sondern auch das Hochladen des Erzeugers der Datei.
Mit freundlichen Grüßen
Cthluhu
Zitat von @klausph:
was mir gerade einfällt:
ich kann den datenliefereranten bitten, eine md5-prüfung in form einer datei zur verfügund zu stellen...
mehr fällt mir nicht ein...
was mir gerade einfällt:
ich kann den datenliefereranten bitten, eine md5-prüfung in form einer datei zur verfügund zu stellen...
mehr fällt mir nicht ein...
Das wäre auch der übliche weg. Der Erzeuger der Datei legt zu datei.zzz noch eine datei.zzz.md5 oder datei.zzz.sha mit dem von ihm lokal auf seinem Rechner erzeugten Hash ab.
Damit wird inherent nicht nur dein Herunterladen überprüft sondern auch das Hochladen des Erzeugers der Datei.
Mit freundlichen Grüßen
Cthluhu
Hi
Wenn die Dateien nicht übereinstimmen, würde ich an deiner Stelle auch die MD5 Datei löschen. Auch wenn die Wahrscheinlichkeit einer Fehlübertragung deutlich kleiner ist, kann auch die MD5 Datei falsch sein. Also lieber beides löschen. Der overhead des mehrmaligen Downloads der MD5 Datei sollte vernachlässigbar sein.
mfg
Cthluhu
Zitat von @klausph:
so hat's geklappt:
habe nun alle dateien mit md5-werte-dateien versehen, diese liegen auf dem server.
beim downloaden der datendateien werden zusätzlich die dazugehörigen md5-dateien mitgezogen.
wenn sie dann auf dem rechner drauf sind, wird der download gecheckt. dazu wird die ebenfalls downgeloadete datei genommen.
entspricht bei md5sum.exe die datei nicht dem inhalt von der md5-datei, wird die downgeloadete datei gelöscht (wichtig!)(sie
ist ja schrott!).
und der ganze vorgang wird sol lange wiederholt, bis md5sum sagt: alles ok. dann geht das skript weiter!
prima. ganz prima!
so hat's geklappt:
habe nun alle dateien mit md5-werte-dateien versehen, diese liegen auf dem server.
beim downloaden der datendateien werden zusätzlich die dazugehörigen md5-dateien mitgezogen.
wenn sie dann auf dem rechner drauf sind, wird der download gecheckt. dazu wird die ebenfalls downgeloadete datei genommen.
entspricht bei md5sum.exe die datei nicht dem inhalt von der md5-datei, wird die downgeloadete datei gelöscht (wichtig!)(sie
ist ja schrott!).
und der ganze vorgang wird sol lange wiederholt, bis md5sum sagt: alles ok. dann geht das skript weiter!
prima. ganz prima!
Wenn die Dateien nicht übereinstimmen, würde ich an deiner Stelle auch die MD5 Datei löschen. Auch wenn die Wahrscheinlichkeit einer Fehlübertragung deutlich kleiner ist, kann auch die MD5 Datei falsch sein. Also lieber beides löschen. Der overhead des mehrmaligen Downloads der MD5 Datei sollte vernachlässigbar sein.
wenn die jahresproduktion runtergezogen wird, dann kommen da schon mal 13 GB zusammen!
mein auftraggeber wurde so langsam nervös, er hatte per hand den download gestern 6x anstubbsen müssen!
Naja, ob bei 13 GB große Dateien wget noch das beste Tool ist, wage ich zu bezweifeln. An deiner Stelle würde ich was nehmen, was inkrementell runterlädt und keine Probleme beim Verbindungsabbruch macht und selbständig checksummen prüft.. Z.B. rsync (einfach, hat aber manchmal Probleme mit großen Binärdateien) oder etwas torrentbasiertes.mein auftraggeber wurde so langsam nervös, er hatte per hand den download gestern 6x anstubbsen müssen!
mfg
Cthluhu