Ich schreibe ein Skript zum Herunterladen und Bearbeiten einer Datei und möchte sicherstellen, dass die Datei nicht unvollständig ist (z. B. aufgrund einer unterbrochenen Verbindung), bevor ich daran arbeite.
Die am häufigsten verwendete Methode zum Überprüfen der Integrität heruntergeladener Dateien ist die Verwendung von MD5-Prüfsummen. Dies setzt voraus, dass die Site, die Sie herunterladen, über tatsächlich veröffentlichte MD5-Prüfsummen ihrer Dateien verfügt. Sie können eine MD5-Prüfsumme überprüfen, indem Sie eine eigene Prüfsumme der heruntergeladenen Datei erstellen und diese mit der veröffentlichten Prüfsumme vergleichen. Wenn sie identisch sind, ist die heruntergeladene Datei vollständig und nicht manipuliert.
Wenn Sie nicht erwarten, dass sich die heruntergeladene Datei ändert, können Sie eine Prüfsumme vorberechnen und im Skript fest codieren. Wenn die Datei jedoch jemals aktualisiert wird, schlägt die Überprüfung fehl.
Um eine MD5-Prüfsumme einer Datei zu erstellen, führen Sie diese aus md5sum myFile
. Im Fall von wget ist dieser Befehl möglicherweise hilfreich, insbesondere wenn die heruntergeladene Datei groß ist:
wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM
.
Dadurch wird beim Herunterladen eine Prüfsumme von "myFile" erstellt und in der Datei MD5SUM gespeichert, wodurch möglicherweise Zeit gespart wird.
Im Falle eines Verbindungsabbruchs ist es meiner Meinung nach am besten, die Exit-Codes von wget zu überprüfen. Wenn der Download ohne Fehler erfolgreich war, kehrt wget zurück 0
. Alles andere deutet darauf hin, dass etwas schief gelaufen ist. Werfen Sie einen Blick in den Abschnitt "Status beenden" von man wget
.
Der Rückkehrcode des zum Herunterladen der Datei verwendeten Befehls gibt an, ob der Befehl erfolgreich ausgeführt wurde oder nicht. In der Regel bedeutet ein Rückkehrcode von 0 Erfolg und eine Zahl ungleich Null einen Fehler. Sie können über die
$?
Variable auf den Rückkehrcode zugreifen .Ein einfaches Beispiel mit
wget
würde gehen:&> /dev/null
Leitet die gesamte Ausgabe von wget auf um,/dev/null
sodass es sich ideal für die Skripterstellung eignet, aber das Debuggen vonwget
Fehlern erschwert.quelle
wget -q ... || { handle ; error ; }
man
Ich habe es nur gefunden, während ich durchgelesen habe, um zu antworten, und die beiden Dinge, die ich sagen wollte, waren bereits in zwei Antworten enthalten - also habe ich zwei Kommentare abgegeben. Auch für dich eine nette Geste.wget
ich denken könnte, dass der Download abgeschlossen ist, auch wenn er kaputt gegangen ist . Proxy-Informationen über unterbrochene TCP-Verbindungen im Vergleich zu geschlossenen TCP-Verbindungen, die bei HTTP problematisch sind, da standardmäßig geschlossenes TCP als Endemarkierung verwendet wird. Aus diesem Grund habe ich beim Ausführen eines Massendownloads eine Überprüfung hinzugefügt, ob die Dateigröße aus dem Header mit der heruntergeladenen Dateigröße übereinstimmt. Ich bin nicht sicher, obwget
solche Konsistenzprüfungen durchgeführt werden oder was in der http-Spezifikation zu diesem Problem steht.