Linux系统递归生成目录中文件的md5的方法


Posted in PHP onJune 29, 2015

linux下使用md5sum递归生成整个目录的md5
今天要用md5sum操作目录,递归生成目录下所有文件的md5值,结果发现它不支持递归操作于是写了个php脚本处理下
代码:

<?php  
   
  $path ='/data/www/bbs/source';  
  $outfile = 'file.md5';  
  get_file_md5($path, $outfile);  
   
  function get_file_md5($path, $outfile)  
  {  
    $path = rtrim($path, '/');  
    if(function_exists('scandir'))  
    {  
      $files = scandir($path);  
      foreach($files as $v)  
      {  
        if($v != '.' && $v != '..')  
        {  
          $file = $path.'/'.$v;  
          if(is_dir($file))  
          {  
            get_file_md5($file, $outfile);  
          }else 
          {  
            file_put_contents($outfile, md5_file($file)." ".$file."\n", FILE_APPEND);  
          }  
        }  
      }  
    }else 
    {  
      $files = opendir($path);  
      while(($f = readdir($files)) !== false)  
      {  
        if($f == '.' || $f == '..')  
          continue;  
        $file = $path.'/'.$f;  
        if(is_dir($file))  
        {  
          get_file_md5($file, $outfile);  
        }else 
        {  
          file_put_contents($outfile, md5_file($file)." ".$file."\n", FILE_APPEND);  
        }  
      }  
      closedir($files);  
    }  
  }

注意:生成的md5值和文件之间是两个空格,否则导致错误如下

   

md5sum: file1.md5: no properly formatted MD5 checksum lines found 

在来个更简单的,使用linux的find命令一句搞定
代码:

find /data/www/bbs/source -type f -print0 | xargs -0 md5sum > file2.md5

测试

md5sum -c file1.md5 
  md5sum -c file2.md5

如图所示

Linux系统递归生成目录中文件的md5的方法

这样把所有检测结果输出到屏幕上来了,如果最后一条显示这样的信息 md5sum: WARNING: 2 of 1147 computed checksums did NOT match 则说明在总共1147条中有2条是不符合的
然后我们可以

md5sum -c file1.md5 | grep FAILED

就很容易知道是哪些文件的篡改过

PHP 相关文章推荐
隐性调用php程序的方法
Mar 09 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
PHP MSSQL 分页实例
Apr 13 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 #PHP
Codeigniter的dom类用法实例
Jun 26 #PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 #PHP
PHP实现事件机制实例分析
Jun 26 #PHP
php使用MySQL保存session会话的方法
Jun 26 #PHP
Linux操作系统安装LAMP环境
Jun 26 #PHP
PHP中Session可能会引起并发问题
Jun 26 #PHP
You might like
文件上传类
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
网站域名和主机:Domain.com
2019/04/01 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
建筑管理专业求职信
2014/07/28 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
Python序列化与反序列化相关知识总结
2021/06/08 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python