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 相关文章推荐
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
Linux系统下PHP-FPM的安装和配置教程
Aug 17 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
php如何获取Http请求
Apr 30 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
用PHP 4.2书写安全的脚本
2006/10/09 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python逆向入门教程
2018/01/15 Python
用Python shell简化开发
2018/08/08 Python
Python对切片命名的实现方法
2018/10/16 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
公司综合部的成员自我评价分享
2013/11/05 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
书香家庭事迹材料
2014/05/09 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
倡议书范文格式
2014/05/12 职场文书
美术学专业求职信
2014/07/23 职场文书
法人委托书范本
2014/09/15 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis