python-定时完全备份及增量备份

from time import strftime
import os
import tarfile
import hashlib
import pickle

def check_md5(fname):
    m=hashlib.md5()
    with  open(fname,'rb') as f1:
        while 1:
            data=f1.read(4096)
            if not data:
                break
            m.update(data)
    return  m.hexdigest()


def  full_backup(src,dst,md5file):
    # 拼接出备份文件的绝对路径
    fname=os.path.basename(src)
    fname='%s_full_%s.tar.gz' % (fname,strftime('%Y%m%d'))
    fname=os.path.join(dst,fname)
    #压缩文件
    tar=tarfile.open(fname,'w:gz')
    tar.add(src)
    tar.close()
    md5dict={}
    for path,folders,files in os.walk(src):
        for file in files:
            key=os.path.join(path,file)
            md5dict[key] = check_md5(key)
    #将字典键值存入文件中
    with open(md5file,'wb') as f1:
        pickle.dump(md5dict,f1)


def inc_backup(src,dst,md5file):
    # 拼接出备份文件的绝对路径
    fname = os.path.basename(src)
    fname = '%s_inc_%s.tar.gz' % (fname, strftime('%Y%m%d'))
    fname = os.path.join(dst, fname)

    md5dict = {}
    for path, folders, files in os.walk(src):
        for file in files:
            key = os.path.join(path, file)
            md5dict[key] = check_md5(key)
    #取出前一天的md5值,然后对比
    with open(md5file,'rb') as f1:
        old_md5=pickle.load(f1)

    tar=tarfile.open(fname,'w:gz')
    for key in md5dict:
        if old_md5.get(key) !=md5dict[key]:
            tar.add(key)
    tar.close()


    with open(md5file,'wb') as f1:
        pickle.dump(md5dict,f1)

if __name__ == '__main__':

    src= '/tmp/abc/security'
    dst='/tmp/abc/backup'
    md5file='/tmp/abc/md5.data'
    if strftime('%a') == 'Mon':
        full_backup(src,dst,md5file)
    else:
        inc_backup(src,dst,md5file)
发布了46 篇原创文章 · 获赞 0 · 访问量 422

猜你喜欢

转载自blog.csdn.net/weixin_45942735/article/details/104154639
今日推荐