web-dev-qa-db-ja.com

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

私のためにそれを行うことができるツールはありますか?または、そのためのシェルスクリプトを作成する必要がありますか?

7
erikbwork

これは問題なく機能するはずです。

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

これは入力するのが少ないです。

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

ワイルドカードは混雑したダウンロードフォルダに少し多いので、ニーズに合わせて調整してください。

9
wuxmedia

いくつか更新しましたが、現在は機能しています。

最初にファイルをダウンロードします。

 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」のダウンロードフォルダを監視して自動チェックすることです。

3
okobaka

私のbash-fuが失敗しない限り、これは機能するはずです。必要なのはwgetcurlだけです。これをdownload-compare.shまたは同様のものとして保存し、ファイルに対してchmod +xを実行します。

今、次のように実行します。

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

これは、OSXに付属のBSDmd5でのみ機能します。

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