快讯资讯
手机优化
系统数码
网络通信人工智能
网站游戏
测评专题

  Python实现文件的全备份和       前端Nginx,后端Apache获取    

Python实现文件的全备份和差异备份

时间:2026-09-10 00:12 来源:未知 人气:

之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题:

md5sum获取有些软连接的MD5值存在问题 不支持对空目录进行备份,因为md5sum无法获取空目录的md5值 权限的修改md5sum无法判断

解决方案:

利用文件的mtime ctime

mtime(Modified time)是在写入文件时随文件内容的更改而更改的

ctime(Create time)是在写入文件、更改所有者、权限或链接设置时随Inode的内容更改而更改的

废话不多说直接上代码:

#!/usr/bin/env python import time,os,sys,cPickle fileInfo = {} def logger(time,fileName,status,fileNum):     f = open('backup.log','a')     f.write("%s\t%s\t%s\t\t%s\n" % (time,fileName,status,fileNum)) def tar(sDir,dDir,fileNum):     command = "tar zcf %s %s /dev/null 21" % (dDir + ".tar.gz",sDir)     if os.system(command) == 0:         logger(time.strftime('%F %X'),dDir + ".tar.gz",'success',fileNum)     else:         logger(time.strftime('%F %X'),dDir + ".tar.gz",'failed',fileNum) def fullBak(path):     fileNum = 0     for root,dirs,files in os.walk(path):         for name in files:             file = os.path.join(root, name)             mtime = os.path.getmtime(file)             ctime = os.path.getctime(file)             fileInfo[file] = (mtime,ctime)             fileNum += 1     f = open(P,'w')     cPickle.dump(fileInfo,f)     f.close()     tar(S,D,fileNum) def diffBak(path):     for root,dirs,files in os.walk(path):         for name in files:             file = os.path.join(root,name)             mtime = os.path.getmtime(file)             ctime = os.path.getctime(file)             fileInfo[file] = (mtime,ctime)     if os.path.isfile(P) == 0:         f = open(P,'w')         f.close()     if os.stat(P).st_size == 0:         f = open(P,'w')         cPickle.dump(fileInfo,f)         fileNum = len(fileInfo.keys())         f.close()         print fileNum         tar(S,D,fileNum)     else:         f = open(P)         old_fileInfo = cPickle.load(f)         f.close()         difference = dict(set(fileInfo.items())^set(old_fileInfo.items()))         fileNum = len(difference)         print fileNum         difference_file = ' '.join(difference.keys())         print difference_file         tar(difference_file,D,fileNum)         f = open(P,'w')         cPickle.dump(fileInfo,f)         f.close() def Usage():     print '''         Syntax:  python file_bakcup.py pickle_file model source_dir filename_bk             model:  1:Full backup 2:Differential backup         example: python file_backup.py fileinfo.pk 2 /etc etc_$(date +%F)             explain:  Automatically add '.tar.gz' suffix     '''     sys.exit() if len(sys.argv) != 5:     Usage() P = sys.argv[1] M = int(sys.argv[2]) S = sys.argv[3] D = sys.argv[4] if M == 1:     fullBak(S) elif M == 2:     diffBak(S) else:     print "\033[;31mDoes not support this mode\033[0m"     Usage()
本文标签:

更多文章

相关文章

网站导航 | 快讯 | 资讯 | 手机 | 优化

  • 数码 | 网络通信 | 人工智能 | 网站 | 游戏

    合作伙伴:

  • 友情链接(欢迎业界知名网站交换链接)申请友情

    

    声明:本站资源皆来自网络,如有侵权问题,请联系管理员处理!

    Copyright ©2020-2028快知站 版权所有 All rights reserved.

    闽ICP备20010713号-1 闽公网安备 35020602001684号