python小实例--定期检查源目录与备份目录的差异进行备份
2017-03-07 11:37
399 查看
在项目中,经常要更新文件,在更新之前首先要备份源文件,所以就用到了这个脚本(来自于Python自动化运维这本书),总共有以下几个步骤:
获取要进行比较的两个目录,进行差异比较,把源目录特有的文件或目录、以及和备份目录不同的文件或目录保存到列表中,并且判断目录下面是否还有目录,递归进行保存这些差异文件。
将差异文件列表中文件或目录的路径换成对应的备份路径,进行判断,如果备份路径不存在,就创建目录。
继续对比源目录和新创建的备份目录中的差异文件,把源路径换成备份目录的路径。
然后遍历复制源目录文件到备份目录。
以下是具体的实现代码:
最后根据需要,可以设定一个定时检查,进行自动同步源目录和备份目录,让其保持一致性。
获取要进行比较的两个目录,进行差异比较,把源目录特有的文件或目录、以及和备份目录不同的文件或目录保存到列表中,并且判断目录下面是否还有目录,递归进行保存这些差异文件。
将差异文件列表中文件或目录的路径换成对应的备份路径,进行判断,如果备份路径不存在,就创建目录。
继续对比源目录和新创建的备份目录中的差异文件,把源路径换成备份目录的路径。
然后遍历复制源目录文件到备份目录。
以下是具体的实现代码:
#!/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实现SVN的目录周期性备份实例
- Python学习笔记-校验源与备份目录差异
- python_如何对实例属性进行类型检查?
- Python学习笔记-校验源与备份目录差异
- Python之——校验源目录与备份目录差异
- Python实现SVN的目录周期性备份实例
- python如何对实例属性进行类型检查
- python_实例: 文件备份程序
- 使用Python清理工程目录,方便代码备份
- SQL Server2005如何进行数据库定期备份
- SQL Server2005如何进行数据库定期备份(转)
- Python实例31[批量对目录下文件重命名]
- Python 实例: 备份文件
- SQL Server2005如何进行数据库定期备份
- Python备份文件到指定目录下
- 【Linux使用技巧】使用 tar -g 参数进行增量+差异备份、还原
- ORACLE RMAN备份--差异增量与累积增量的策略实例图
- linux下的使用 tar -g 参数进行增量+差异备份、还原
- 使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理
- 利用rman进行完整备份_无恢复目录