用Python写脚本,完全备份和增量备份
来源:互联网 发布:淘宝联盟手机版分享赚 编辑:程序博客网 时间:2024/05/17 06:32
需求:
在/root/backup下面有两个文件夹dst和src。要求在周一的时候进行完全备份,其余日子进行增量备份。从src备份到dst。
思路及关键点:
- 建立一个文件,以字典方式记录src的文件名以及文件对应的md5的值
- 完全备份的时候将文件名和md5值写在一个文件里面。cPickle的知识点。
- 增量备份的时候比较文件名是否在key里面,没有就要备份;有的话,这个文件的md5值是否改变,改变了就要备份
- os.path.join()拼接路径,os.listdir(),os.chdir()
- time.strftime()判断周几
- cPickle,可以无损记录所有Python的变量类型。文件操作。
- tarfile对文件打包的使用
- hashlib用于计算文件md5的值。注意不要一次打开一个文件,4k地打开,防止打开一个超大文件爆内存。
- with file()可以打开一个文件之后不f.close()
#!/usr/bin/env pythonimport timeimport osimport cPickle as pimport tarfileimport hashlibbaseDir = '/root/backup'srcDir = 'src'dstDir = 'dst'fullName = "full_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))incrName = "incr_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))md5file = 'md5.data'def md5sum(fname): m = hashlib.md5() with file(fname) as f: while True: data = f.read(4096) if len(data) == 0: break m.update(data) return m.hexdigest()def fullBackup(): md5Dict = {} fileList = os.listdir(os.path.join(baseDir,srcDir)) for eachFile in fileList: md5Dict[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile)) with file(os.path.join(baseDir,dstDir,md5file),'w') as f: p.dump(md5Dict,f) tar = tarfile.open(os.path.join(baseDir,dstDir,fullName),'w:gz') os.chdir(baseDir) tar.add(srcDir) tar.close()def incrBackup(): newmd5 = {} fileList = os.listdir(os.path.join(baseDir,srcDir)) for eachFile in fileList: newmd5[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile)) with file(os.path.join(baseDir,dstDir,md5file)) as f: storedmd5 = p.load(f) tar = tarfile.open(os.path.join(baseDir,dstDir,incrName),'w:gz') os.chdir(baseDir) for eachKey in newmd5: if (eachKey not in storedmd5) or (newmd5[eachKey] != storedmd5[eachKey]): tar.add(os.path.join(srcDir,eachKey)) tar.close() with file(os.path.join(baseDir,dstDir,md5file),'w') as f: p.dump(newmd5,f)def main(): if time.strftime('%a') == 'Mon': fullBackup() else: incrBackup()if __name__ == '__main__': main()~
0 0
- 用Python写脚本,完全备份和增量备份
- 完全备份和增量备份
- ORACLE完全备份和增量备份
- SVN完全备份和增量备份
- SVN完全备份和增量备份
- hbase定期备份,增量和完全备份
- 完全备份、差异备份和增量备份的权威解释!!!
- 增量备份、差异备份和完全备份的区别
- Oracle的差异增量备份和累积增量备份,RMAN增量备份脚本
- SQL Server 备份和还原全攻略, 完全备份,差异备份,增量备份,事务日志备份
- 什么是完全备份,差异备份,增量备份?
- 完全备份,差异备份,增量备份
- 什么是完全备份,差异备份,增量备份?
- 完全备份、差异备份、增量备份
- 完全备份 差异备份 增量备份
- MySQL增量备份脚本和异地备份脚本【Shell】
- mysqldump和mysqlbinlog实现完全备份和增量备份
- oracle 增量备份脚本
- 使用volley框架实现listview的多布局
- JDK没有javac.exe之类的文件
- Python学习——Lists and Dictionaries
- 移动HTML5前端性能优化总结
- springmvc流程大致分析1 ROOT上下文创建
- 用Python写脚本,完全备份和增量备份
- struts2标签库详解
- 谷哥的小弟学后台(14)——HttpSession
- linux十一十二单元作业
- 关闭DrawerLayout的手势滑动
- 改变exe文件图标的方法
- 【hdu2896】病毒侵袭
- 阮小二买彩票
- pat a1007