Herunterladen einer Datei Skript mit Prüfsummenverifizierung Erstellen
Frage
Ich mag ein Shellscript erstellen, die Dateien aus einer .diz Datei liest, in denen Informationen über die verschiedenen Quelldateien gespeichert sind, die erforderlich sind, einen bestimmten Teil der Software (imagemagick in diesem Fall) zu kompilieren. Ich benutze Mac OSX Leopard 10.5 für diese Beispiele.
Grundsätzlich möchte ich eine einfache Möglichkeit haben, diese .diz Dateien zu erhalten, die die Informationen für up-to-date-Pakete Quelle halten. Ich würde nur müssen diese .diz Dateien mit URLs, Versionsinformationen und Dateiprüfsummen aktualisieren.
Beispiel Zeilen:
libpng:1.2.42:libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:http://downloads.sourceforge.net/project/libpng/00-libpng-stable/1.2.42/libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:9a5cbe9798927fdf528f3186a8840ebe
Skript Teil:
while IFS=: read app version file url md5
do
echo "Downloading $app Version: $version"
curl -L -v -O $url 2>> logfile.txt
$calculated_md5=`/sbin/md5 $file | /usr/bin/cut -f 2 -d "="`
echo $calculated_md5
done < "files.diz"
Eigentlich habe ich mehr als nur eine Frage nach diesem.
- wie zu berechnen und die Prüfsummen der besten zu vergleichen? Ich wollte MD5-Prüfsummen in der .diz Datei speichern und vergleichen Sie es mit String-Vergleich mit „cut“ ting aus der Zeichenfolge
- gibt es eine Möglichkeit curl einen anderen Dateinamen zu sagen, zu retten? (In meinem Fall der Dateiname wird hässlich libpng-1.2.42.tar.bz2? Use_mirror = biznetnetworks)
- i scheinen Probleme mit den Backticks zu haben, der den Ausgang des verrohrt md5 und Schnitt in die Variable $ calculated_md5 lenken sollte. ist die Syntax falsch?
Danke!
Lösung
while IFS=: read app version file url md5
do
echo "Downloading $app Version: $version"
#use -o for output file. define $outputfile yourself
curl -L -v $url -o $outputfile 2>> logfile.txt
# use $(..) instead of backticks.
calculated_md5=$(/sbin/md5 "$file" | /usr/bin/cut -f 2 -d "=")
# compare md5
case "$calculated_md5" in
"$md5" )
echo "md5 ok"
echo "do something else here";;
esac
done < "files.diz"
Andere Tipps
Im Folgendes ist ein praktischer Einzeiler:
curl -s -L <url> | tee <destination-file> |
sha256sum -c <(echo "a748a107dd0c6146e7f8a40f9d0fde29e19b3e8234d2de7e522a1fea15048e70 -") ||
rm -f <destination-file>
Einwickeln es in einer Funktion Mitnahmen 3 Argumente auf: - die URL - das Ziel - die sha256
download() {
curl -s -L $1 | tee $2 | sha256sum -c <(echo "$3 -") || rm -f $2
}
Meine curl
hat eine -o
(--output
) Option eine Ausgabedatei angeben. Es gibt auch ein Problem mit der Zuordnung zu $calculated_md5
. Es soll nicht das Dollarzeichen auf der Vorderseite hat, wenn Sie es zuweisen. Ich habe nicht /sbin/md5
hier so kann ich nicht kommentieren, dass. Was ich habe, ist md5sum
. Wenn Sie es zu haben, können Sie es als Alternative in Betracht ziehen. Insbesondere hat es eine --check
Option, die aus einer Datei von md5sums Eintrag Werke, die für Ihre Situation nützlich sein könnten. HTH.