import os, sys
import filecmp
import re
import shutil
holderlist = []
def compareme(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:
compareme(os.path.adspath(os.path.join(dir1, item)), \
os.path.adspath(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()
print "source:" + dir1+
",dest:"+dir2
source_files=compareme(dir1, dir2)
print "source_files:"+str(source_files)
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=compareme(dir1, dir2)
for item
in source_files:
destination_dir=re.sub(dir1, dir2, item)
destination_files.append(destination_dir)
print "udpate item:"
print source_files
copy_pair=zip(source_files, destination_files)
print "source dir:"+str(source_files)+
",dest dir:"+str(destination_files)
for item
in copy_pair:
if os.path.isfile(item[
0]):
shutil.copyfile(item[
0], item[
1])
if __name__ ==
'__main__':
main()
[root@localhost test]# ls cmp.py dir1 dir2 [root@localhost test]# ls dir1 dir2 dir1: 1 test01 test02 test.log
dir2: 1 test02 test.log [root@localhost test]# cat dir1/test.log dir2/test.log test a bc TEST a bc [root@localhost test]# python cmp.py /root/test/dir1 root/test/dir2 source:/root/test/dir1,dest:/root/test/dir2 source_files:[‘/root/test/dir1/test01’, ‘/root/test/dir1/test.log’] udpate item: [‘/root/test/dir1/test01’, ‘/root/test/dir1/test.log’] source dir:[‘/root/test/dir1/test01’, ‘/root/test/dir1/test.log’],dest dir:[‘/root/test/dir2/test01’, ‘/root/test/dir2/test.log’] [root@localhost test]# [root@localhost test]# ls dir1 dir2 dir1: 1 test01 test02 test.log
dir2: 1 test01 test02 test.log [root@localhost test]# cat dir1/test.log dir2/test.log test a bc test a bc [root@localhost test]#
转载请注明原文地址: https://ju.6miu.com/read-668994.html