Pro každého, kdo sem přichází a chce porovnat soubor s konkrétním součtem md5, můžete zkusit tuto funkci:
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
}
A pak to použijte jako:
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
V tomto řádku if [ $file1 != $file2 ] , neporovnáváte obsah dvou souborů, ale pouze názvy souborů. Takže if [ "md5sum.txt" != "GeoLite2-City.md5" ] bude vždy pravda.
To by mělo fungovat:
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
Takže .. problém, který vidíte, je zřejmě formát md5sum.txt soubor, který vytvoříte, neodpovídá formátu .md5 soubor, který si stáhnete, proti kterému je třeba zkontrolovat hodnotu, kterou vypočítáte.
Následující by bylo blíže mé verzi scénáře. (Vysvětlení níže.)
#!/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
Hlavní rozdíly jsou zde...
rm -f GeoLightCity.datmísto-rf. Nedosahujme dál, než potřebujeme.md5sumpřebírá standardní vstup místo zpracování souboru podle názvu. Výsledkem je, že výstup neobsahuje název souboru. Bohužel kvůli omezením Linuxumd5sumpříkaz, toto stále neodpovídá souboru .md5, který jste stáhli z Maxmind, takže:cutse používá k úpravě výsledného výstupu, přičemž zůstane pouze vypočítaný md5.- pomocí
cmpnamísto podsložek podle komentářů k vaší otázce.
Druhý a třetí bod jsou pro vás možná nejdůležitější.
Další možností pro vytvoření souboru md5sum.txt by bylo udělat to za běhu během stahování. Například:
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
Toto používá tee příkaz k rozdělení souboru do jeho umístění „uložit“ a další roura, která prochází md5sum a vygeneruje váš soubor .txt.
Může vám ušetřit minutu, kterou by jinak sežral součet md5, který běží poté. A bude lépe využívat výhod SMP. :)