是否有一个工具可以自动下载并比较 md5sums?

是否有一个工具可以自动下载并比较 md5sums?

我想要但找不到的东西:

$ 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

有什么工具可以帮我完成这个任务吗?还是我需要为此编写一个 shell 脚本?

答案1

这应该可以正常工作。

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

这不需要输入太多;

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

在拥挤的下载文件夹中,通配符有点多,因此请根据您的需要进行调整。

答案2

更新了一些内容,现在可以正常工作了。

首先下载文件:

 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"

仍然不知道,为什么别名不想像上面那样运行,所以如果使用 bashvi .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”。

答案3

除非我的 bash-fu 失败了,否则这应该可行。你只需要有wgetcurl。将其另存为download-compare.sh或类似文件,然后chmod +x在文件上运行。

现在,运行如下:

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

md5这只适用于 OS X 自带的BSD :

#!/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) ]

相关内容