用Python写脚本,实现完全备份和增量备份的示例


Posted in Python onApril 29, 2018

需求:

在/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发送邮件示例(支持中文邮件标题)
Feb 16 Python
让 python 命令行也可以自动补全
Nov 30 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Github 使用python对copilot做些简单使用测试
Apr 14 Python
基于python的多进程共享变量正确打开方式
Apr 28 #Python
基于Python log 的正确打开方式
Apr 28 #Python
python+pandas分析nginx日志的实例
Apr 28 #Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 #Python
python实现关键词提取的示例讲解
Apr 28 #Python
python实现扫描日志关键字的示例
Apr 28 #Python
python socket网络编程之粘包问题详解
Apr 28 #Python
You might like
Dedecms常用函数解析
2008/02/01 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
如何表示python中的相对路径
2020/07/08 Python
美国性感女装网站:bebe
2017/03/04 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
项目施工员岗位职责
2014/03/09 职场文书
文案策划专业自荐信
2014/07/07 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
mysql的单列多值存储实例详解
2022/04/05 MySQL