python源目录与备份目录差异检查并同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python源目录与备份目录差异检查并同步相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import re
import filecmp
import shutil

holderlist=[]
def compareme(dir1,dir2):
	dircomp=filecmp.dircomp(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:
			compareme(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 "请准确输入参数,例如:python comp.py datadir backupdir"
		sys.exit()
	source_files=compareme(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_dir =item.replace(dir1, dir2)
		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=compareme(dir1,dir2)
		for item in source_files:
			destination_dir = item.replace(dir1, dir2)
#			destination_dir=re.sub(dir1,dir2,item)
			destination_files.append(destination_dir)
			
	print "更新的内容:"
	print source_files
	copy_pair=zip(source_files,destination_files)
	for item in copy_pair:
		if os.path.isfile(item[0]):
			shutil.copyfile(item[0],item[1])
if __name__ == '__main__':
	main()
			
	
	
	
脚本代码可直接使用
	
	


以上是关于python源目录与备份目录差异检查并同步的主要内容,如果未能解决你的问题,请参考以下文章

文件与目录差异对比模块filecmp

Rsync+Sersync实时同步数据目录

rsync数据镜像备份工具

校验源与备份目录差异

在 iCloud 上备份文档目录而不同步

RSync实现文件备份同步详解