时间:2021-05-22
需求:
在/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()~以上这篇用Python写脚本,实现完全备份和增量备份的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
数据备份的三种方法如下: 1、完全备份。完全备份是指拷贝整个磁盘卷或逻辑磁盘的内容。 2、增量备份。增量备份即备份自从上次备份操作以来新改变的数据,这些新改
有网友问我在win2003下如何自动备份MySQL数据库,既然是自动备份,那肯定得写脚本。我想了想,这个并不是很困难,是很容易实现的,备份可以用脚本实现,那自动
一、增量备份脚本0级备份脚本:红色部分为自定义的备份文件放置的目录复制代码代码如下:#script.:BackupFull.sh#creater:xyh#dat
在windows下用python脚本实现文件的备份,参考《AByteofPython3》第十一章(Page59)。#!/usr/bin/python#-*-co
爱数备份软件2007标准增强版1.系统备份:在不关机状态下完全或增量备份Windows操作系统2.邮件备份:备份Outlook,Foxmail邮件客户端中的邮件