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

之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题:
解决方案:
利用文件的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 2>&1" % (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()
测试:
$ python file_backup.py data.pk 1 data data_$(date +%F) #全备份 $ > data/www.linuxeye.com #测试创建文件,修改文件权限 $ chmod 777 data/py/eshop_bk/data.db $ python file_backup.py data.pk 2 data data_$(date +%F)_1 #备份改变的文件 2 data/py/eshop_bk/data.db data/www.linuxeye.com
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Python实现文件的全备份和差异备份
# Python实现文件的全备份和差异备份详解
# Python文件的全备份与差异备份
# C#实现MySQL命令行备份和恢复
# C#实现的SQL备份与还原功能示例
# c#使用file.copy实现文件备份示例
# Python实现网站文件的全备份和差异备份
# sqlserver 手工实现差异备份的步骤
# 提权思路之MSSQL差异备份取系统权限
# MSSQL差异备份取系统权限的相关软件下载
# 复习一下sql server的差异备份
# C#写差异文件备份工具的示例
# 是在
# 希望能
# 不支持
# 来做
# 谢谢大家
# 多说
# 存在问题
# 来写
# 对空
# 进行备份
# open
# backup
# log
# fileNum
# cPickle
# fileInfo
# os
# sys
# fileName
# status
相关文章:
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何批量查询域名的建站时间记录?
定制建站哪家更专业可靠?推荐榜单揭晓
桂林网站制作公司有哪些,桂林马拉松怎么报名?
建站主机类型有哪些?如何正确选型
网站制作需要会哪些技术,建立一个网站要花费多少?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何快速生成凡客建站的专业级图册?
如何通过虚拟机搭建网站?详细步骤解析
如何将凡科建站内容保存为本地文件?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何用IIS7快速搭建并优化网站站点?
ppt制作免费网站有哪些,ppt模板免费下载网站?
Android自定义控件实现温度旋转按钮效果
建站之星如何快速解决建站难题?
如何彻底卸载建站之星软件?
济南网站制作的价格,历城一职专官方网站?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之星安装步骤有哪些常见问题?
简历在线制作网站免费版,如何创建个人简历?
宁波自助建站系统如何快速打造专业企业网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何在橙子建站中快速调整背景颜色?
如何在香港服务器上快速搭建免备案网站?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何通过西部建站助手安装IIS服务器?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
电商网站制作公司有哪些,1688网是什么意思?
长沙做网站要多少钱,长沙国安网络怎么样?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何在景安服务器上快速搭建个人网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
贸易公司网站制作流程,出口贸易网站设计怎么做?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何挑选最适合建站的高性能VPS主机?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
建站主机是什么?如何选择适合的建站主机?
青岛网站建设如何选择本地服务器?
C++如何编写函数模板?(泛型编程入门)
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在云指建站中生成FTP站点?
如何在建站之星绑定自定义域名?
*请认真填写需求信息,我们会在24小时内与您取得联系。