用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 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
python通过索引遍历列表的方法
May 04 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Flask框架配置与调试操作示例
Jul 23 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
浅谈Python中的继承
Jun 19 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
详解用Python把PDF转为Word方法总结
Apr 27 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP的PSR规范中文版
2013/09/28 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
python 自定义对象的打印方法
2019/01/12 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
教学实验楼管理制度
2014/02/01 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
领导失职检讨书
2014/02/24 职场文书
精彩广告词大全
2014/03/19 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
技术员个人工作总结
2015/03/03 职场文书
就业意向书范本
2015/05/11 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
python绘制箱型图
2021/04/27 Python
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫