用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中的序列化与反序列化的使用
Jun 30 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Mar 19 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Pytorch中.new()的作用详解
Feb 18 Python
python中get和post有什么区别
Jun 19 Python
python爬取youtube视频的示例代码
Mar 03 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
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
javascript实现画板功能
2020/04/12 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python+django实现简单的文件上传
2016/08/17 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python实现网页自动签到功能
2019/01/21 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
幼儿园美术教学反思
2014/01/31 职场文书
听课评语大全
2014/04/30 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
会计专业自荐信范文
2015/03/05 职场文书
唐山大地震的观后感
2015/06/05 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis