zoukankan      html  css  js  c++  java
  • 文件夹进行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校验文件,然后比对校验文件是否相同,如果两个文件相同,这认为这两个比对的数据文件夹一致

  • 相关阅读:
    安装与配置 Elasticsearch
    推荐几个 WebSocket 服务端实现
    GitLab 修改主机名,更换 IP 配置,配置 SMTP
    Choose GitLab for your next open source project
    大数据全栈式开发语言 – Python
    IPC's epoch 6 is less than the last promised epoch 7
    将/home空间从新挂载到/var/lib/docker
    Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to IP1:8020 Invalid volume failure config value: 1
    查看端口被那个进程占用
    查看java进程启动的详细参数和过程
  • 原文地址:https://www.cnblogs.com/chengmin/p/4509196.html
Copyright © 2011-2022 走看看