自动校验文件夹及其内容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
时间: 2024-12-29 23:28:15

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

【我的Linux,我做主!】浅谈MD5校验文件完整一致性

目录:(一)MD5介绍(二)md5sum命令(三)实战演练 (一)MD5介绍(1.1)MD5即Message-Digest Algorithm 5(信息-摘要算法 第5版),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又名:摘要算法.哈希算法),主流编程语言普遍已由MD5实现.将数据运算为另一固定长度值(十六进制的为32位),是杂凑算法的基础原理,MD5的前身有MD2.MD3和MD4.MD5的作用是大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把

小程序云开发向数据库中新增数据

小程序云开发向数据库中新增数据,基本操作在新建完一个云项目后都有了,右键上传部署login云函数后,就可以在模拟器中简单地操作数据库了 这是databaseGuide.js生成时就给出的代码,增删改查都需要先将相关部分的代码去掉注释. // pages/databaseGuide/databaseGuide.js const app = getApp() Page({ data: { step: 1, counterId: '', openid: '', count: null, queryRe

23 遍历删除本地目录的方法,文件末尾追加内容,按行读取文件内容

1.遍历删除本地目录 /** * 递归删除非空目录 * @param file */ public static void deletNotEmptyDir(File file){ File[] files = file.listFiles(); if (files != null) { for (File f : files) { deletNotEmptyDir(f); } } file.delete(); } 2.文件末尾追加内容 /** * 在文件末尾追加字符串 * @param fil

Java 自带MD5 校验文件

http://www.iteye.com/topic/1127319 前天第一次发表博客到论坛,关于Java文件监控一文,帖子地址在:http://www.iteye.com/topic/1127281 评论的朋友很多,下载代码的朋友很不少,感谢在论坛上看我帖子的朋友,还有回复评论的朋友,给我提供建议的朋友. 从这些建议中,虽然语言简短,但是却有的是一语中的,这里说一下一下关于帖子的代码中HashFile中的MD5文件校验算法, 该算法是使用Java自带的MessageDigest类,测试结果,

linux下操作iso文件的两个shell程序

记得这还是当初玩cdlinux时弄的,当初应该是由于windows下的Ultraiso对cdlinux的镜像修改后导致镜像无法引导,所以就使用linux下的命令进行操作 这应该是挂载iso文件的命令: mount -o loop /home/cdl/CDl.iso /mnt#mkdir /home/cdl/CDlinuxcp -r /mnt/* /home/cdl/CDlinuxumount -r /mntchmod -R 777 /home/cdl/CDlinux 这应该是重新生成iso文件的

windows下将多个文件里面的内容合并成一个一个文件

如题:例如有多个章节的小说,现在要把他们合并成一个txt文件. 利用windows自带cmd工具: 一.拷贝合并1.将你的txt文档按照顺序分别命名为01.txt 02.txt 03.txt……2.将这些文档移动到D盘123文件夹里3.点“开始”,“运行”,输入cmd后回车4.进入D:\123\文件夹(方法:输入d:会车,再输入cd d:\123注意空格)这样就进入D盘的123文件夹目录了5.输入copy *.txt aaa.txt回车,注意之间的空格.然后输入Y回车6.好啦,一切OK

MD5 校验文件

https://blog.csdn.net/wudishine/article/details/42466831 MD5.h #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Type define */ typedef unsigned char byte; typedef unsigned long ulong; using std::string; using std::ifstream;

列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)

[[email protected] Desktop]# zip -r image.zip ./*.jpg adding: 20161007_113743.jpg (deflated 0%) adding: 20161007_114943.jpg (deflated 0%) [[email protected] Desktop]# file image.zip image.zip: Zip archive data, at least v2.0 to extract [[email protec

微信小程序 setData动态设置数组中的数据

setdata传递动态数据值必须为对象(只能是key:value) 语法如下 this.setData({ filter: 1212 }) 如果setdata要传递数组呢? 首先相到的是 this.setData({ filter.a: 12 filter.b: 32 }) 这样回报语法错误 既然语法规定不能在里面写数组,那就把数组定义到外面 filter.selectArea1 = 1, filter.selectArea2 = 2, filter.selectArea3 = 3, this.