Python实现定期检查源目录与备份目录的差异并进行备份功能示例


Posted in Python onFebruary 27, 2019

本文实例讲述了Python实现定期检查源目录与备份目录的差异并进行备份功能。分享给大家供大家参考,具体如下:

在项目中,经常要更新文件,在更新之前首先要备份源文件,所以就用到了这个脚本(来自于Python自动化运维这本书),总共有以下几个步骤:

1. 获取要进行比较的两个目录,进行差异比较,把源目录特有的文件或目录、以及和备份目录不同的文件或目录保存到列表中,并且判断目录下面是否还有目录,递归进行保存这些差异文件。
2. 将差异文件列表中文件或目录的路径换成对应的备份路径,进行判断,如果备份路径不存在,就创建目录。
3. 继续对比源目录和新创建的备份目录中的差异文件,把源路径换成备份目录的路径。
4. 然后遍历复制源目录文件到备份目录。

以下是具体的实现代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
import filecmp
import re
import shutil
holderlist = []
##对应第一个步骤
def compare_me(dir1, dir2):
  dircomp = filecmp.dircmp(dir1, dir2)
  only_in_one = dircomp.left_only
  diff_in_one = dircomp.diff_files
  dirpath = os.path.abspath(dir1)
  [ holderlist.append(os.path.abspath(os.path.join(dir1, x))) for x in only_in_one ]
  [ holderlist.append(os.path.abspath(os.path.join(dir1, x))) for x in diff_in_one ]
  if len(dircomp.common_dirs) > 0:
    for item in dircomp.common_dirs:
      compare_me(os.path.abspath(os.path.join(dir1, item)), os.path.abspath(os.path.join(dir2, item)))
  return holderlist
##对应第二个步骤
def main():
  if len(sys.argv) > 2:
    dir1 = sys.argv[1]
    dir2 = sys.argv[2]
  else:
    print "Usage: ", sys.argv[0], "datadir backupdir"
    sys.exit()
  source_files = compare_me(dir1, dir2)
  dir1 = os.path.abspath(dir1)
  if not dir2.endswith('/'):
    dir2 = dir2 + '/'
  dir2 = os.path.abspath(dir2)
  destination_files = []
  createdir_bool = False
  for item in source_files:
    destination_dir = re.sub(dir1, dir2, item)
    destination_files.append(destination_dir)
    if os.path.isdir(item):
      if not os.path.exists(destination_dir):
        os.makedirs(destination_dir)
        createdir_bool = True
   ##对应第三个步骤
  if createdir_bool:
    destination_files = []
    source_files = []
    source_files = compare_me(dir1, dir2)
    for item in source_files:
      destination_dir = re.sub(dir1, dir2, item)
      destination_files.append(destination_dir)
  ##对应第四个步骤
  print "update item: "
  print source_files
  copy_pair = zip(source_files, destination_files)
  print "copy_pair is %s" % copy_pair
  for item in copy_pair:
    print "item is %s, %s" % (item[0], item[1])
    if os.path.isfile(item[0]):
      shutil.copyfile(item[0], item[1])
if __name__ == '__main__':
  main()

最后根据需要,可以设定一个定时检查,进行自动同步源目录和备份目录,让其保持一致性。

Python 相关文章推荐
Python语言描述随机梯度下降法
Jan 04 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
python hook监听事件详解
Oct 25 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
pytorch自定义二值化网络层方式
Jan 07 Python
python实现IOU计算案例
Apr 12 Python
python 双循环遍历list 变量判断代码
May 04 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
详解Django-restframework 之频率源码分析
Feb 27 #Python
Python的UTC时间转换讲解
Feb 26 #Python
Python逐行读取文件中内容的简单方法
Feb 26 #Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 #Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 #Python
初探利用Python进行图文识别(OCR)
Feb 26 #Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 #Python
You might like
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
javascript中new关键字详解
2015/12/14 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
入党积极分子介绍信
2014/01/17 职场文书
党务公开方案
2014/05/06 职场文书
学校安全防火方案
2014/06/07 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
世界遗产的导游词
2015/02/13 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
中标通知书范本
2015/04/17 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
建党伟业电影观后感
2015/06/01 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
nginx共享内存的机制详解
2022/03/21 Servers