目标:

1.传入3个参数:源文件路径,目标文件路径,md5文件

2.每周一实现全量备份,其余时间增量备份

1.通过传入的路径,获取该路径下面的所有目录和文件(递归)

方法一:使用os.listdir

代码如下:

#!/usr/bin/env python
#coding:utf8import os,sysdef lsdir(folder):contents = os.listdir(folder)print "%s\n%s\n" % (folder, contents)for path in contents:full_path = os.path.join(folder, path)if os.path.isdir(full_path):lsdir(full_path)if __name__ == "__main__":lsdir(sys.argv[1])

•运行代码,效果如下:

[root@localhost python]# python listdir.py /a
/a
['b', 'a.txt']/a/b
['c', 'b.txt']/a/b/c
['c.txt']

方法二:使用os.walk

代码如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/env python
# -*- coding: utf-8 -*-import os,sysdef lsdir(folder):contents = os.walk(folder)for path, folder, file in contents:print "%s\n%s\n" %(path, folder + file)if __name__ == "__main__":lsdir(sys.argv[1])

•运行代码,测试效果

[root@localhost python]# python listdir1.py /a
/a
['b', 'a.txt']/a/b
['c', 'b.txt']/a/b/c
['c.txt']

2.如何计算文件的md5值(每次读取4K,直到读取完文件所有内容,返回一个16进制的md5值)

代码如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
[root@localhost python]# cat md5.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-import hashlib
import sysdef md5(fname):m = hashlib.md5()with open(fname) as fobj:while True:data = fobj.read(4096)if not data:breakm.update(data)return m.hexdigest()if __name__ == "__main__":print md5(sys.argv[1])

•运行代码,测试效果

[root@localhost python]# python md5.py a.txt
c33da92372e700f98b006dfa5325cf0d
[root@localhost python]# md5sum a.txt
c33da92372e700f98b006dfa5325cf0d  a.txt

*提示:使用linux自带的md5sum和自己编写的Python计算的md5值相通

3.编写全量和增量备份脚本

代码如下:

#!/usr/bin/env python
#coding:utf8import time
import os
import tarfile
import cPickle as p
import hashlibdef md5check(fname):m = hashlib.md5()with open(fname) as fobj:while True:data = fobj.read(4096)if not data:breakm.update(data)return m.hexdigest()def full_backup(src_dir, dst_dir, md5file):par_dir, base_dir = os.path.split(src_dir.rstrip('/'))back_name = '%s_full_%s.tar.gz' % (base_dir, time.strftime('%Y%m%d'))full_name = os.path.join(dst_dir, back_name)md5dict = {}tar = tarfile.open(full_name, 'w:gz')tar.add(src_dir)tar.close()for path, folders, files in os.walk(src_dir):for fname in files:full_path = os.path.join(path, fname)md5dict[full_path] = md5check(full_path)with open(md5file, 'w') as fobj:p.dump(md5dict, fobj)def incr_backup(src_dir, dst_dir, md5file):par_dir, base_dir = os.path.split(src_dir.rstrip('/'))back_name = '%s_incr_%s.tar.gz' % (base_dir, time.strftime('%Y%m%d'))full_name = os.path.join(dst_dir, back_name)md5new = {}for path, folders, files in os.walk(src_dir):for fname in files:full_path = os.path.join(path, fname)md5new[full_path] = md5check(full_path)with open(md5file) as fobj:md5old = p.load(fobj)with open(md5file, 'w') as fobj:p.dump(md5new, fobj)tar = tarfile.open(full_name, 'w:gz')for key in md5new:if md5old.get(key) != md5new[key]:tar.add(key)tar.close()if __name__ == '__main__':src_dir = '/Users/xkops/gxb/'dst_dir = '/tmp/'md5file = '/Users/xkops/md5.data'if time.strftime('%a') == 'Mon':full_backup(src_dir, dst_dir, md5file)else:incr_backup(src_dir, dst_dir, md5file)

•运行代码,测试效果(执行前,修改需要备份的文件和路径),运行之后检查/tmp下是否生成了当天的备份文件。

Python实现目录文件的全量和增量备份相关推荐

  1. python 读取文件夹 增量文件_Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  2. Linux随笔19-MySQL主从复制、Percona XtraBackup实现全量和增量备份、ProxySQL实现读写分离

    Contents 1. MySQL5.7实现主从复制 1.1 基础环境 1.2. 配置主从复制 1.2.1. master节点上的配置 1.2.2. slave节点上的配置 1.2.3. 中继日志问题 ...

  3. xtrabackup全量、增量备份恢复mysql数据库

    一. 全量备份恢复: 查看原表内容: MariaDB [(none)]> select * from testdb.students; +----+------------+------+--- ...

  4. linux svn 增量备份脚本,svn全量和增量备份详解(示例代码)

    1.svn的安装: yum安装: yum install -y subversion mkdir /data/svn svnadmin create project-1 svnadmin create ...

  5. mysql全量和增量备份脚本

    全量: [root@master leo]# cat DBfullBak.sh #!/bin/bash #use mysqldump to fully backup mysql dataBakDir= ...

  6. mysql增量脚本_mysql全量和增量备份脚本

    全量: [root@master leo]# cat DBfullBak.sh #!/bin/bash #use mysqldump to fully backup mysql data BakDir ...

  7. MySQL数据以全量和增量方式,向ES搜索引擎同步流程

    本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...

  8. mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong

    GitHub - levonmo/mongo-sync-elasticsearch: mongodb数据同步到elasticsearch的中间件,支持全量,增量(新增修改删除),实时同步等多种同步情景 ...

  9. 关于全量与增量 的思考

    一.数据同步:全量与增量 1.背景 数据如果保留多份,就会存在一致性问题,就需要同步,同步分为两大类:全量和增量 2. 概述 数据如果要保留副本,要么同时写(就是多写),或者进行复制:异步写(即从主数 ...

最新文章

  1. 行为型模式之十一:备忘录模式
  2. Subversion的权限控制
  3. 什么是自然语言处理,它如何工作?
  4. ubuntu 跟xshell的问题
  5. 神奇的linux发行版 tiny core linux
  6. 蓝鲸“配置平台”正式开源
  7. PPT无法直接在页面上播放插入的MP4视频
  8. html6与html5的区别,XHTML和HTML5的区别
  9. WPS怎么统计相同名称的数据_群发邮件平台的数据统计怎么用
  10. html如何动态添加样式表,JavaScript动态插入CSS的方法
  11. c语言中的三角函数公式,高中三角函数公式大全-必背基础知识点.doc
  12. 百度网盘8种批量修改文件名称重命名的方法
  13. 【盒子居中常用的四种方法】
  14. Scriptable Render Pipeline-Baked Shadows
  15. 教你看电脑的配置,学下以后会用得着。
  16. “抄袭事件”开庭小志
  17. js二分法排序代码分享
  18. 手机视频监控-手视通
  19. 肠道微生物群在2型糖尿病中的影响
  20. IPguard服务器升级步骤详解

热门文章

  1. [ubuntu] chromium不断自己刷新问题
  2. 苹果7plus电池寿命查询_iPhone真实电池寿命快速检测,比苹果官方测的还准!
  3. 【推荐】会开发和懂开发的区别
  4. Hybris 体系结构
  5. 计划策略-25-具有配置的订货型生产
  6. UP_DOWN_REQUEST
  7. 如何用C语言清空特定文件夹中的所有文件
  8. ALV Checkbox 单行灰显
  9. 手里的基金在震荡?数据解读2021“开门红”如何控制仓位
  10. 数据解密2020年高考,志愿填报可以选这些