每一个公司对上线的业务要求都不同,但对一些重要的文件,在线上覆盖前要全面检查文件的md5,因此这就要求得到更新前文件的md5值,而后跟研发提供的作比较,若是一致才更新,若是发现不对,就中止更新,固然逻辑都写在脚本里就能够了,由于每一个公司线上服的更新逻辑都不同,这块内容咱们不作深刻探讨,咱们今天主要看看如何得到研发的更新文件的md5值,基本思路是这样,首先须要定义一个函数得到研发给的每一个文件绝对路径,而后再定义一个函数用来返回md5值,在主函数中对每一个文件调用生成md5值得函数获得md5值而后写入文件中,脚本思路就介绍到这里,咱们来看代码:python
#!/usr/bin/python app
import sys ide
import os函数
import hashlib this
if len(sys.argv) < 2:spa
print 'this script need a arv'orm
sys.exit(0)对象
if not os.path.exists(sys.argv[1]) or not os.path.isdir(sys.argv[1]):ip
print 'it is not exists or not a dir'md5
sys.exit(1)
def getmd5(filename):
m = hashlib.md5()
mfile = open(filename, 'rb')
m.update(mfile.read())
mfile.close()
md5value = m.hexdigest()
return (md5value+"\t"+ filename)
def all_files(root):
flist = []
for path, subdirs, files in os.walk(root):
for f in files:
flist.append(os.path.join(path, f))
return flist
if __name__ == '__main__':
outfile = open('md5file.txt', 'a+')
flist = all_files(sys.argv[1])
for fi in flist:
res = getmd5(fi)
outfile.write(res + '\n')
outfile.close()
脚本解释,最前开始导入须要的模块,以前python还单独有个md5模块,如今基本不用了,都用hashlib了,这个功能更为强大,先定义了一个getmd5()的函数,接收一个文件当作参数,hashlib.md5()生成hash对象,而后调用update()方法将字符串计算出md5值,接下来定义了all_files()函数,这个函数接收一个目录,而后获得文件的绝对路径,加入到列表中,返回。
在主函数中,打开一个文件md5file.txt来存储得到的文件名和对应的md5值,循环flist列表,将文件传入getmd5()函数,得到文件和md5数据,写入文件,最后关闭文件,这篇就到这里