6

Что я хочу, но не могу найти:

$ download -url http://download.com/me.zip -md5 http://download.com/me.md5
[================================================================>] 100%
md5check .... OK
$

Но то, что я должен сделать с моими текущими знаниями, это:

$ wget http://download.com/me.zip
$ md5sum me.zip
12345....6789 me.zip
#use eyes for comparison

Есть ли инструмент, который может сделать это для меня? Или мне нужно написать скрипт для этого?

3 ответа3

8

Это должно работать просто отлично.

wget ftp://yourfile.zip && wget ftp://yourfile.zip.md5 && md5sum -c *.md5

это меньше, чтобы напечатать;

wget ftp://yourfile{.zip,.zip.md5} && md5sum -c *.md5

Подстановочные знаки размещаются в загруженной папке для загрузки, так что подстраивайтесь под свои нужды.

3

Обновлены некоторые вещи, теперь это работает.

Сначала скачайте файл:

 wget http://source.tar.gz

Затем загрузите md5sum файла.

 wget http://source.md5 -o source.tar.gz.md5

Так это выглядит так:

$ ls
 source.tar.gz
 source.tar.gz.md5

Тогда: vi /bin/md5check.sh

#!/bin/bash
key=$1
[ ! -f "$key" ] && echo "sth done: There is no md5 file to check: $key" && exit
[ ! -f "${key%.*}" ] && echo "sth done: There is no source file to check: ${key%.*}" && exit
[ ! "${key##*.}" == "md5" ]  && echo "usage:$0 file.tar.gz.md5" && exit
mdsum=(`md5sum -- "${key%.*}"`);
mdsum_md5=(`head -n1 "$key"`);
[ "${mdsum}" == "" ] || [ "${mdsum_md5}" == "" ] && echo "Propably program error, check spaces or special characters in filenames. md5sum:"${mdsum}" file:"${mdsum_md5} && return;
if [ "${mdsum}" == "$mdsum_md5" ];
then echo "    done: CHECKED all ok"
else echo -e "    done: WARRNING MD5 sums are not equal!\t(${key})" && echo $mdsum && head -n1 "$key"
fi

а также

chmod 700 md5check.sh

Так что я могу

./md5check.sh source.tar.gz.md5 
      done: CHECKED all ok

./md5check.sh source.tar.gz.md5 
      done: WARRNING MD5 sums are not equal!      (source.tar.gz.md5)
      db41373e270b06c00dd3d2c89b95899a
      db21373e270b06c00dd3d2c89b95899a source.tar.gz

И где часть загрузки, упомянутая ранее?

wget http://source.tar.gz && wget http://source.md5 -o source.tar.gz.md5 && /bin/md5check.sh source.tar.gz.md5

Теперь вы можете использовать псевдоним:

this is wrong: alias md5dl="wget $1 && wget $2 -o $(basename $1).md5 && /bin/md5check.sh $(basename $1).md5"

До сих пор не знаю, почему псевдонимы не хотят функционировать, как описано выше, поэтому, если вы используете bash vi .bash_profile и добавляете:

function md5dl() {
wget $1 && wget $2 -o $(basename $1).md5 && /bin/md5check.sh $(basename $1).md5
}

Перезагрузить источник профиля source .bash_profile

И последний шаг будет:

 md5dl http://download.com/me.zip http://download.com/me.md5

Но, на мой взгляд, лучше: (1) скачать все необходимые файлы и (2) затем сравнить все типы «md5, asc, sign, sha1» сразу в каталоге загрузки. Еще лучше, если вы загрузите папку «md5, asc, sign, sha1» для монитора и автоматической проверки.

2

Если мой баш-фу не подвел меня, это должно сработать. Вам нужно только иметь wget и curl . Сохраните его как download-compare.sh или аналогичный, затем запустите chmod +x для файла.

Теперь запустите как:

./download-compare http://example.com/file.tar.gz http://example.com/sum.md5

Это работает только с BSD md5 который поставляется с OS X:

#!/bin/bash
wget "$1"
checksum=$(curl "$2")
if [ "$checksum" == $(md5 -q $(basename "$1")) ]
then 
  echo "Checksum correct."
else
  echo "Checksum false."
fi

Замена строки if должна работать для Linux - но я не могу это проверить:

if [ "$checksum" == $(md5sum $(basename "$1") | cut -d ' ' -f 1) ]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .