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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php读取mysql的简单实例
Jan 15 PHP
PHP函数getenv简介和使用实例
May 12 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP钩子实现方法解析
May 21 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
PHP获取学生成绩的方法
Nov 17 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安装问题
2006/10/09 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
对联广告js flash激活
2006/10/19 Javascript
jQuery 注意事项 与原因分析
2009/04/24 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Python中str.format()详解
2017/03/12 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
python实现KNN分类算法
2019/10/16 Python
python微信公众号开发简单流程实现
2020/03/09 Python
jupyter notebook 重装教程
2020/04/16 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
淘宝活动策划方案
2014/02/06 职场文书
房地产项目建议书
2014/03/12 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
新党章心得体会
2014/09/04 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL