文件夹进行MD5校验的实现算法

每份相同数据(文件夹)都可以生成一份唯一的md5校验文件,我们可以通过直接校验整个数据文件夹的方法来确定数据是否有误。

 

1.针对整个文件夹生成md5校验文件方法:

以data文件夹为例,我们需要得到data整个文件夹中的文件的md5校验值,我们通过shell程序对整个data文件夹中的文件进行md5校验。

通过如下命令获得整个data文件夹的md5校验文件:

1 cd  data
2 find  ./  -type  f  -print0  |  xargs  md5sum  >  data_temp.md5
3 cat data_temp.md5 |  sort > data.md5

(找出data文件中的每个文件并获得该文件的md5值存入data_temp.md5

中 ,然后对md5值的文件进行排序获得data.md5校验文件)

 

data.md5文件中数据格式如下,前面的字符串是该文件的md5值,后面的是该文件相对data文件夹的路径。由于每个不同文件的md5值都唯一,每个文件的路径都不同,所以排序之后,同样的文件夹生成的该md5文件都是唯一的

040173e4c2c29787cd0e644bd3737f8f  ./preinstall/Babaqunaer_1.3.6.apk

0054b51601427b2630793d43ed0b224c  ./pcvoice/7.mp3

2.生成md5校验文件程序:

#!/bin/bash
# author: huinatianyun
# Updated Date:2014-03-24
# Set environment variables

LANG=""
export LANG
#这里必须要设置语言环境,因为sort排序是对文件的每一行作为一个单位,相互比较,比较原则是从首字符向后依次进行比较,语言环境不同,字符的编码可能就不一样,所以会导致文件文件排序结果不一致,LANG=""表示默认设置为en_US 
echo ""
echo ""
echo "please put generate_md5_value.sh, custdata.tar, hpdata.tar, hwapudata.tar in the same directory,"
echo ""

read -p "are you put generate_md5_value.sh in the right position ? (Y/N): " select_yn

echo ""

echo ""

if [ "$select_yn" == "Y" ] || [ "$select_yn" == "y" ]; then

echo "start generate data.md5 ..."

cd ./data

find ./ -type f -print0 | xargs -0 md5sum | sort > ../data.md5 

#xargs 命令-0是表示以空字符作为分隔符,因为有些目录的名字是含有空格的,而xargs是默认是以空格为分割符的,它会误认为还有空格的目录的路径为两个路径,换成空字符就是消除这个问题 

echo "generate md5 value over"

elif [ "$select_yn" == "N" ] || [ "$select_yn" == "n" ]; then 

echo "stop generate md5 value !"

else

echo "I don't know what your choice is !!!"

fi 

 

3.数据校验方法:

通过上述方法对data文件夹里数据生成一份md5校验文件,这个md5文件就这可作为这个data文件夹的校验文件,校验一个文件夹数据是否和data相同的方法就是针对该文件夹通过同样的方法生成一份md5校验文件,然后比对校验文件是否相同,如果两个文件相同,这认为这两个比对的数据文件夹一致

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注