ファイルを特定の md5 sum と比較したい場合は、次の関数を試すことができます:
function checkmd5() {
md5_to_test=$1
md5_from_file=$(md5sum "$2" | cut -d " " -f1)
md5_results="Input: $md5_to_test\nFile: $md5_from_file"
if [[ $md5_to_test == $md5_from_file ]]
then
echo -e "\n\e[92mSUCCESS\e[39m\n$md5_results"
else
echo -e "\n\e[91mFAILURE\e[39m\n$md5_results"
fi
}
そして、次のように使用します:
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
その行 if [ $file1 != $file2 ]
、2 つのファイルの内容を比較するのではなく、ファイル名のみを比較します。だから if [ "md5sum.txt" != "GeoLite2-City.md5" ]
それはうまくいくはずです:
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
だから..あなたが見ている問題は、 md5sum.txt
の形式が 作成したファイルは .md5
の形式と一致しません ダウンロードしたファイルに対して、計算した値を確認する必要があります。
以下は、私のバージョンのスクリプトに近いものです。 (以下に説明があります。)
#!/bin/bash
if ! cd /home/example/public_html/exampledomain.com/billing/system/; then
echo "Can't find work directory" >&2
exit 1
fi
rm -f GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gunzip > GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | gunzip > GeoLite2-City.dat
curl -O https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5
md5sum < GeoLite2-City.dat | cut -d\ -f1 > md5sum.txt
file1="md5sum.txt"
file2="GeoLite2-City.md5"
if ! cmp --silent "$file1" "$file2"; then
mail -s "Results of GeoLite Updates" [email protected] <<< "md5sum for GeoLite2-City failed. Please check the md5sum. File may possibly be corrupted."
fi
ここでの主な違いは..
rm -f GeoLightCity.dat
-rf
の代わりに .必要以上に手を伸ばさないようにしましょう。md5sum
ファイルを名前で処理するのではなく、標準入力を取ります。その結果、出力にはファイル名が含まれません。残念ながら、Linuxmd5sum
の制限のため コマンドを実行しても、これはまだ Maxmind からダウンロードした .md5 ファイルと一致しないため:cut
計算された md5 のみを残して、結果の出力を変更するために使用されます。cmp
を使用 質問に対するコメントごとに、サブシェルの代わりに。
2 番目と 3 番目のポイントは、おそらくあなたにとって最も重要なものです。
md5sum.txt ファイルを作成するための別のオプションは、ダウンロード時にオンザフライで行うことです。例:
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz \
| gunzip | tee -a GeoLite2-City.dat | cut -d\ -f1 | md5sum > md5sum.txt
これは tee
を使用します コマンドを使用してファイルを「保存」場所と別のパイプに分割し、md5sum を経由して .txt ファイルを生成します。
後で実行される md5sum によって消費される分を節約できます。また、SMP をより有効に活用できます。 :)