当前位置: 首页 > article >正文

python输出指定目录下所有文件(全路径),并核对md5码

最近在工作中发现需要经常对公司的脚本文件的md5值进行比对,因此写了一个脚本进行处理,下面是脚本的优化过程

版本一:

功能说明:使用os.walk()对指定目录进行浏览,然后对得出的三个参数进行组合,最后判断文件是否存在,然后输出:

def all_files(filepath):result = []for root,dirs,files in os.walk(filepath):if dirs:for i in dirs:for j in files:if os.path.isfile(os.path.join(root,i,j)):result.append(os.path.join(root,i,j))else:for overfile in files:if os.path.isfile(os.path.join(root,overfile)):result.append(os.path.join(root,overfile))result.sort()return resultfor sourcefile in all_files(sys.argv[1]): if not sourcefile.endswith('.md5'):subprocess.call(['md5sum',sourcefile])else:subprocess.call(['cat',sourcefile])


 


版本二:

查阅《python cookbook》后发现由于对os.walk()功能的不熟悉,版本一中有很多多余的循环和判断,参考后,优化如下:

def all_files(checkpath):result = []for path,subdirs,files in os.walk(checkpath):files.extend(subdirs)files.sort()for name in files:result.append(os.path.join(path,name))return resultfor sourcefile in all_files(sys.argv[1]):if not sourcefile.endswith('.md5'):subprocess.call(['md5sum',sourcefile])else:subprocess.call(['cat',sourcefile])



版本三:

增加对多个目录进行比对,只是对脚本后半部分增加对列表的处理:

for pathlist in sys.argv[1:]:for sourcefile in all_files(pathlist):if not sourcefile.endswith('.md5'):subprocess.call(['md5sum',sourcefile])else:subprocess.call(['cat',sourcefile])

版本四:

最终脚本,增加帮助功能:

#! /usr/bin/python"""The script use to check md5sum for the ufsd files."""
__version__ = "$CheckMd5 = 2.0$"import sys
import os
import subprocess
from optparse import OptionParser#print 'Check path',sys.argv[1:]def all_files(checkpath):result = []for path,subdirs,files in os.walk(checkpath):files.extend(subdirs)files.sort()for name in files:result.append(os.path.join(path,name))return resultdef cleckmd5():for pathlist in sys.argv[1:]: for sourcefile in all_files(pathlist):if not sourcefile.endswith('.md5'):subprocess.call(['md5sum',sourcefile])else:subprocess.call(['cat',sourcefile])def execute_from_command_line(argv = None):if argv is None:argv = sys.argvusage = "usage: %prog [options] arg"parser = OptionParser(usage)parser.add_option("-f","--file",dest = "filename",help = "read data from Filename")parser.add_option("-v","--version",action = "store_true",dest = "version")parser.add_option("-q","--quiet",action = "store_false",dest = "verbose")(options,args) = parser.parse_args()if options.filename: cleckmd5()if options.version:print __version__if options.verbose:print "reading %s..." %options.filenamesif __name__ == '__main__':execute_from_command_line(sys.argv)


直接查询文件md5sum命令

 hashlib.md5(open(r'D:\My Documents\Downloads\sol-11_2-text-sparc.iso', 'rb').read()).hexdigest()

http://www.lryc.cn/news/2412868.html

相关文章:

  • 手指检测心跳设计——传感器制作篇
  • QQ盗号软件后门分析与反击
  • SecureCRT的使用教程( 过程非常详细!!值得查看)
  • Ubuntu下载-最新版本Ubuntu Linux 7.10下载(转)
  • OLT操作命令集及排障
  • Joomla安装图文教程
  • 联想A820T 修改MAC
  • 背包问题九讲笔记_01背包
  • 谷歌地图离线数据包_除了谷歌地图,还有哪些导航软件可以选择,这6个地图值得一试...
  • JavaScript 深入学习教程
  • 破解教程 第二课 脱壳
  • 【Unity3D插件】“我敢说,这是你见过最多的插件合集”Unity插件分享不断更新中。。。
  • 5分钟替换天空 - Affinity Photo 教程
  • MSOCache文件夹能否删除?
  • 《新牧场物语》攻略(转自百度)
  • 如何快速搭建网站(小白教程)(48小时内完成)
  • Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
  • noip/信息技术选考 进制转化
  • Web服务器安全配置
  • element ui 表格常见特殊的属性
  • ffftp搜索服务器上文件,FFFtp的教程
  • 7.2 discuz 拿shell_discuz 7.2 SQL 注入漏洞分析
  • 分析:HPE为何要出售其软件部门
  • 爱普生R230打印机故障大全
  • java基础之移位运算符
  • 网站SEO优化知识梳理
  • 嵌入式技术相关网站和论坛和博客
  • java模拟器下载文件_KEmulator(java模拟器)最新下载
  • vrml场景实例代码_Mask TextSpotter v3:用于场景文字检测和识别的分割Proposal网络...
  • Oracle 11g的安装