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实现图象锐化代码
Jun 14 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
php中str_pad()函数用法分析
Mar 28 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 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牛逼的面试题分享
2013/01/18 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
php图片裁剪函数
2018/10/31 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
ionic环境配置及问题详解
2017/06/27 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python之列表推导式的用法
2019/11/29 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
高中生学习总结的自我评价范文
2013/10/13 职场文书
销售辞职报告范文
2014/01/12 职场文书
公司前台辞职报告
2014/01/19 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
先进员工获奖感言
2014/08/14 职场文书
教书育人演讲稿
2014/09/11 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书