文件备份工具

files_backup.py

#!/usr/bin/env python

# -*- coding: UTF-8 -*-


import hashlib,shutil,time,json,os
from config import *


NowTime=time.strftime("%Y%m%d%H%M%S", time.localtime())

def getConfig():
    Dump_json=json.dumps(Service_conf_json)
    Dump_json=eval(Dump_json)
    return Dump_json


class File_path_info(object):
        def __init__(self,Service_name):
                self.Service_name=Service_name

           def getFileinfo(self):
        self.file_info=getConfig()[self.Service_name]
        self.file_info=self.file_info[0]
                   return self.file_info

    def getFilebase(self):
        self.file_base=self.getFileinfo()['FileBase']+'/'
        return self.file_base

    def getFilename(self):
        self.file_name=self.getFileinfo()['FileName']
        return self.file_name

    def getFilepath(self):
        self.file_path=self.getFilebase()+self.getFilename()
        return self.file_path

    def getBackupdir(self):
        if self.getFileinfo()['BakDir']+'/'+self.Service_name+'/' != Backup_Dir+'/'+self.Service_name+'/':
            if os.path.exists(self.getFileinfo()['BakDir']+'/'+self.Service_name+'/') == False:
                os.makedirs(self.getFileinfo()['BakDir']+'/'+self.Service_name+'/')
                self.backup_dir=self.getFileinfo()['BakDir']+'/'+self.Service_name+'/'
                            return self.backup_dir
            else:
                self.backup_dir=self.getFileinfo()['BakDir']+'/'+self.Service_name+'/'
                                return self.backup_dir
        else:
                        if os.path.exists(Backup_Dir+'/'+self.Service_name+'/') == False:
                                os.makedirs(Backup_Dir+‘/’+self.Service_name+'/')
                                self.backup_dir=Backup_Dir+'/'+self.Service_name+'/'
                                return self.backup_dir
                        else:
                                self.backup_dir=Backup_Dir+'/'+self.Service_name+'/'
                                return self.backup_dir

    def getBackupfile(self):
        self.backup_file=os.listdir(self.getBackupdir())
        self.backup_file.sort(key=lambda fn: os.path.getmtime(self.getBackupdir()+fn))
        if self.backup_file == []:
            return
        else:
            return self.backup_file[-1]


    def getBackuppath(self):
        if self.getBackupfile() == None:
            shutil.copyfile(self.getFilepath(),self.getBackupdir()+'/'+self.getFilename()+'.'+NowTime)
            self.backup_path=self.getBackupdir()+self.getBackupfile()
            return self.backup_path
        else:
            self.backup_path=self.getBackupdir()+self.getBackupfile()
            return self.backup_path

def getSrcmd5(Service_name):
    srcfile_path=open(InfoInstance(Service_name).getFilepath(),'rb')
    src_md5ck=hashlib.md5()
    while True:
        srcfile_readl=srcfile_path.read(8192)
        if not srcfile_readl:
            break
        src_md5ck.update(srcfile_readl)
    srcfile_path.close()
    return src_md5ck.hexdigest()

def getBakmd5(Service_name):
    bakfile_path=open(InfoInstance(Service_name).getBackuppath(),'rb')
    bak_md5ck=hashlib.md5()
    while True:
        bakfile_readl=bakfile_path.read(8192)
        if not bakfile_readl:
            break
        bak_md5ck.update(bakfile_readl)
    bakfile_path.close()
    return bak_md5ck.hexdigest()


def InfoInstance(Service_name):
    FileInfo=File_path_info(Service_name)
    return FileInfo

def getFileslist():
    Files_list=getConfig().keys()
    return Files_list

def runConfBackup():
    for Service_name in getFileslist():
        if os.path.exists(InfoInstance(Service_name).getFilepath()) == True:
            if getSrcmd5(Service_name) != getBakmd5(Service_name):
                shutil.copyfile(InfoInstance(Service_name).getFilepath(),InfoInstance(Service_name).getBackupdir()+'/'+InfoInstance(Service_name).getFilename()+'.'+NowTime)
                print '---------------------------'
                print 'Service Name:'+Service_name
                print 'Backup Path:'+InfoInstance(Service_name).getBackuppath()
        else:
            print 'src file not exist!!  '+Service_name+'   '+InfoInstance(Service_name).getFilepath()


if __name__ == '__main__':

    runConfBackup()



config.py
##default backup directory##
Backup_Dir='/tmp/conf_bak'
##
Service_conf_json={
    'myself_config': [
        {
            'FileBase': '/opt/My_project/conf_bak',
            'FileName': 'config.py',
        'BakDir': Backup_Dir
        }
    ],
   'profile': [
        {
            'FileBase': '/etc',
            'FileName': 'profile',
            'BakDir': Backup_Dir
        }
    ],
    'fstab': [
        {
            'FileBase': '/etc',
            'FileName': 'fstab',
        'BakDir': Backup_Dir
        }
    ],
    'hosts': [
        {
            'FileBase': '/etc',
            'FileName': 'hosts',
            'BakDir': Backup_Dir
        }
    ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值