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.

  1. 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
  2. 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)
  3. 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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top