自动校验文件夹及其内容shell程序(md5 校验文件夹中所有数据)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动校验文件夹及其内容shell程序(md5 校验文件夹中所有数据)相关的知识,希望对你有一定的参考价值。

一.问题的来源
有时候copy一些重要的数据,得到之后需要与原数据进行核对是否数据一致。这就需要进行校验。

二.问题的分析
校验数据有多种方法,最简单的是使用文件的md5码进行校验。但是文件很多,手动的每个文件进行md5校验显然不合适,这就需要编写shell程序解决。

三.问题的解决
通过shell程序解决文件校验问题
1.通过命令得到文件md5值
比如得到的数据文件夹为 data 文件夹
则在data 文件夹中输入以下命令

find  ./ -type f  -print | xargs md5sum  > /tmp/md5.1
cd /tmp
cat md5.1 | sort > md5.1.1
rm md5.1  
mv   md5.1.1  md5.1

2.在原数据文件夹中 data 文件夹中输入以下命令

find ./ -type f -print | xargs md5sum > /tmp/md5.2
cd /tmp
cat md5.2 | sort > md5.2.1
rm md5.2
mv md5.2.1  md5.2

3.把上面得到的md5.1  和md5.2放到同一个服务器同一个目录下,比如从server_1  scp 到server_2下

scp  server_1:/tmp/md5.1   /tmp/

4.执行 diff 如果输出为空,则说明数据一直,否则,说明数据不一致

diff   /tmp/md5.1  /tmp/md5.2

四.总体思路
通过得到原文件夹下和新文件夹下的所有文件的md5值,然后把md5值进行排序,最后比较两md5值是否相同即可

五.注意 
实际上  上述操作中的md5.1  (或md5.2) 中的内容是 "文件名     md5值" 的格式。

六.全自动shell程序
比如 有两台机器  server_1  和server_2  ,刚从server_1 上的  /home/longxibendi/ 下scp 的 data文件夹到 server_2 的 /home/longxibendi/ 下
程序如下:

#!/bin/bash#author  longxibendi#function  check   file1  and file2    use  their md5 #support   folder
cd /home/longxibendi/data
find  ./ -type f  -print | xargs md5sum  > /tmp/md5.1
cd /tmp
cat md5.1 | sort > md5.1.1
rm md5.1  
mv   md5.1.1  md5.1
ssh   [email protected]_2
cd /home/longxibendi/data
find ./ -type f -print | xargs md5sum > /tmp/md5.2
cd /tmp
cat md5.2 | sort > md5.2.1
rm md5.2
mv md5.2.1  md5.2
scp   server_1:/tmp/md5.1   /tmp/md5.2
# if  file1 and file2 is same ,then   print  It is OK  
# else  if  file1 and file2 is different ,then print  They are different
if [ -z "`diff md5.1 md5.2`" ] ;then
        echo "It is OK";
else
        echo "They are different";
fi



本文出自 “11726068” 博客,谢绝转载!

以上是关于自动校验文件夹及其内容shell程序(md5 校验文件夹中所有数据)的主要内容,如果未能解决你的问题,请参考以下文章

MD5校验及其c实现

Shell脚本对Linux进行文件校验

核对下载好的ROM包MD5校验码,确认ROM正确无误请问刷机怎么核对这个md5?

shell学习四十八天----文件校验和匹配

散列函数的应用及其安全性

shell脚本实现rysnc文件备份以及数据传输校验