Python实现定期检查源目录与备份目录的差异并进行备份功能示例
本文实例讲述了Python实现定期检查源目录与备份目录的差异并进行备份功能。分享给大家供大家参考,具体如下:
在项目中,经常要更新文件,在更新之前首先要备份源文件,所以就用到了这个脚本(来自于Python自动化运维这本书),总共有以下几个步骤:
1.获取要进行比较的两个目录,进行差异比较,把源目录特有的文件或目录、以及和备份目录不同的文件或目录保存到列表中,并且判断目录下面是否还有目录,递归进行保存这些差异文件。
2.将差异文件列表中文件或目录的路径换成对应的备份路径,进行判断,如果备份路径不存在,就创建目录。
3.继续对比源目录和新创建的备份目录中的差异文件,把源路径换成备份目录的路径。
4.然后遍历复制源目录文件到备份目录。
以下是具体的实现代码:
#!/usr/bin/envpython #-*-coding:utf-8-*- importos,sys importfilecmp importre importshutil holderlist=[] ##对应第一个步骤 defcompare_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)))forxinonly_in_one] [holderlist.append(os.path.abspath(os.path.join(dir1,x)))forxindiff_in_one] iflen(dircomp.common_dirs)>0: foritemindircomp.common_dirs: compare_me(os.path.abspath(os.path.join(dir1,item)),os.path.abspath(os.path.join(dir2,item))) returnholderlist ##对应第二个步骤 defmain(): iflen(sys.argv)>2: dir1=sys.argv[1] dir2=sys.argv[2] else: print"Usage:",sys.argv[0],"datadirbackupdir" sys.exit() source_files=compare_me(dir1,dir2) dir1=os.path.abspath(dir1) ifnotdir2.endswith('/'): dir2=dir2+'/' dir2=os.path.abspath(dir2) destination_files=[] createdir_bool=False foriteminsource_files: destination_dir=re.sub(dir1,dir2,item) destination_files.append(destination_dir) ifos.path.isdir(item): ifnotos.path.exists(destination_dir): os.makedirs(destination_dir) createdir_bool=True ##对应第三个步骤 ifcreatedir_bool: destination_files=[] source_files=[] source_files=compare_me(dir1,dir2) foriteminsource_files: destination_dir=re.sub(dir1,dir2,item) destination_files.append(destination_dir) ##对应第四个步骤 print"updateitem:" printsource_files copy_pair=zip(source_files,destination_files) print"copy_pairis%s"%copy_pair foritemincopy_pair: print"itemis%s,%s"%(item[0],item[1]) ifos.path.isfile(item[0]): shutil.copyfile(item[0],item[1]) if__name__=='__main__': main()
最后根据需要,可以设定一个定时检查,进行自动同步源目录和备份目录,让其保持一致性。
PS:这里再为大家推荐一款功能相似的在线工具供大家参考使用:
在线文本比较工具:
http://tools.jb51.net/aideddesign/txt_diff
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。