《python运维自动化》-备份目录

来源:互联网 发布:淘宝如何销售农产品 编辑:程序博客网 时间:2024/06/06 02:38
#! /usr/bin/env pythonimport os, sysimport filecmpimport reimport shutilholderlist = []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 holderlistdef 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)        #print "dest:"+str(destination_files)        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]#

0 0