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操作ie登陆土豆网的方法
May 09 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python实现多线程网页下载器
Apr 15 Python
Python Grid使用和布局详解
Jun 30 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
python如何为list实现find方法
May 30 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
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
php中yii框架实例用法
2020/12/22 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
Vue中的异步组件函数实现代码
2018/07/20 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
python实现图片识别汽车功能
2018/11/30 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
银行会计业务的个人自我评价
2013/11/02 职场文书
心理健康活动总结
2014/04/30 职场文书
关于保护环境的建议书
2014/08/26 职场文书
离婚协议书怎么写
2014/09/12 职场文书
五年级小学生评语
2014/12/26 职场文书
冰雪公主观后感
2015/06/16 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫