现在的位置: 首页linux>正文
rss
linux下使用md5sum递归生成整个目录的md5 [原创]
2012年12月05日 linux 评论关闭 ⁄ 被围观 16,268 次+

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

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

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

  1. md5sum:file1.md5:noproperlyformattedmd5checksumlinesfound

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

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

测试

  1. md5sum-cfile1.md5
  2. md5sum-cfile2.md5

如图所示

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

  1. md5sum-cfile1.md5|grepfailed

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

本文地址:/43/1208.html
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
 

抱歉!评论已关闭.