用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 相关文章推荐
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
Python中装饰器的一个妙用
Feb 08 Python
详细介绍Python函数中的默认参数
Mar 30 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
详解python 爬取12306验证码
May 10 Python
Django中URL的参数传递的实现
Aug 04 Python
python异常触发及自定义异常类解析
Aug 06 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
Python中tkinter的用户登录管理的实现
Apr 22 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
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
如何将python中的List转化成dictionary
2016/08/15 Python
python模糊图片过滤的方法
2018/12/14 Python
使用python绘制二维图形示例
2019/11/22 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
主题酒店策划书
2014/01/28 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
优秀党支部申报材料
2014/12/24 职场文书
医院病假条怎么写
2015/08/17 职场文书
nginx请求限制配置方法
2021/07/09 Servers