失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python备份发包脚本_用Python写脚本 实现完全备份和增量备份的示例

python备份发包脚本_用Python写脚本 实现完全备份和增量备份的示例

时间:2023-07-03 09:33:40

相关推荐

python备份发包脚本_用Python写脚本 实现完全备份和增量备份的示例

需求:

在/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 python

import time

import os

import cPickle as p

import tarfile

import hashlib

baseDir = '/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写脚本,实现完全备份和增量备份的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

如果觉得《python备份发包脚本_用Python写脚本 实现完全备份和增量备份的示例》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。