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学习之PHP运算符
Oct 09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
php写app用的框架整理
2019/09/29 PHP
PHP 实现重载
2021/03/09 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
实习教师自我鉴定
2013/09/27 职场文书
小学生打架检讨书
2014/01/26 职场文书
取保候审保证书
2014/04/30 职场文书
高考励志标语
2014/06/05 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
Python实现滑雪小游戏
2021/09/25 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python