当前位置: > Linux编程 >

linux下使用md5sum递归生成整个目录的md5

时间:2014-05-14 17:41来源:linux.it.net.cn 作者:it

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

 
  1. <?php   
  2.   
  3. $path ='/data/www/bbs/source';   
  4. $outfile = 'file.md5';   
  5. get_file_md5($path$outfile);   
  6.   
  7. function get_file_md5($path$outfile)   
  8. {   
  9.     $path = rtrim($path, '/');   
  10.     if(function_exists('scandir'))   
  11.     {   
  12.         $files = scandir($path);   
  13.         foreach($files as $v)   
  14.         {   
  15.             if($v != '.' && $v != '..')   
  16.             {   
  17.                 $file = $path.'/'.$v;   
  18.                 if(is_dir($file))   
  19.                 {   
  20.                     get_file_md5($file$outfile);   
  21.                 }else  
  22.                 {   
  23.                     file_put_contents($outfile, md5_file($file)."  ".$file."\n", FILE_APPEND);   
  24.                 }   
  25.             }   
  26.         }   
  27.     }else  
  28.     {   
  29.         $files = opendir($path);   
  30.         while(($f = readdir($files)) !== false)   
  31.         {   
  32.             if($f == '.' || $f == '..')   
  33.                 continue;   
  34.             $file = $path.'/'.$f;   
  35.             if(is_dir($file))   
  36.             {   
  37.                 get_file_md5($file$outfile);   
  38.             }else  
  39.             {   
  40.                 file_put_contents($outfile, md5_file($file)."  ".$file."\n", FILE_APPEND);   
  41.             }   
  42.         }   
  43.         closedir($files);   
  44.     }   
  45. }  

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

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

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

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

测试

 
  1. md5sum -c file1.md5  
  2. md5sum -c file2.md5  

如图所示

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

 
  1. md5sum -c file1.md5 | grep FAILED  

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

(责任编辑:IT)
------分隔线----------------------------