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程序设计有所帮助。