создание скрипта загрузки файла с проверкой контрольной суммы - PullRequest
2 голосов
/ 18 января 2010

Я хочу создать шеллскрипт, который читает файлы из файла .diz, где хранится информация о различных исходных файлах, которые необходимы для компиляции определенной части программного обеспечения (в данном случае imagemagick). Я использую Mac OSX Leopard 10.5 для этого примера.

По сути, я хочу иметь простой способ поддерживать эти файлы .diz, которые содержат информацию для актуальных исходных пакетов. мне просто нужно обновить эти файлы .diz с помощью URL, информации о версии и контрольных сумм файлов.

Пример строки:

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

часть скрипта:

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"

На самом деле у меня есть больше, чем один вопрос по этому поводу.

  1. как правильно рассчитать и сравнить контрольные суммы? я хотел сохранить контрольные суммы md5 в файле .diz и сравнить их со сравнением строк с «вырезанием» из строки
  2. есть ли способ указать curl другое имя файла для сохранения? (в моем случае имя файла выглядит ужасно: libpng-1.2.42.tar.bz2? use_mirror = biznetnetworks)
  3. У меня, похоже, есть проблемы с обратными галочками, которые должны направлять вывод переданного по каналу md5 и разрезать его на переменную $ computing_md5. неправильный синтаксис?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 18 января 2010
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"
4 голосов
/ 10 апреля 2017

Ниже приведен практический однострочник:

curl -s -L <url> | tee <destination-file> |
sha256sum -c <(echo "a748a107dd0c6146e7f8a40f9d0fde29e19b3e8234d2de7e522a1fea15048e70  -") ||
rm -f <destination-file>

оборачивая это в функцию, принимающую 3 аргумента: - URL - пункт назначения - Ша256

download() {
   curl -s -L $1 | tee $2 | sha256sum -c <(echo "$3  -") || rm -f $2
}
0 голосов
/ 18 января 2010

My curl имеет опцию -o (--output) для указания выходного файла. Также есть проблема с вашим назначением на $calculated_md5. У него не должно быть знака доллара спереди, когда вы его назначаете. У меня нет /sbin/md5 здесь, поэтому я не могу комментировать это. То, что у меня есть, это md5sum. Если он у вас есть, вы можете рассмотреть его как альтернативу. В частности, он имеет опцию --check, которая работает из списка файлов md5sums, который может быть полезен для вашей ситуации. НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...