文件夾進行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校驗文件,然后比對校驗文件是否相同,如果兩個文件相同,這認為這兩個比對的數據文件夾一致


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM