Python同步文件

发布时间:2019-09-21 11:14:23编辑:auto阅读(1667)

    最近在做Python开发,研究了技术大牛写的脚本,在他的脚本上做了优化。优化脚本已在做过测试还是挺好用的,如果你觉得不错就直接拿到生产用吧。

    先直接放代码出来:

    ---------------------------------------------------------------------------------------------------------

    import re,shutil,os,sys,filecmp


    diffFilesList = []

    def commpare(dir1,dir2):

        cmpobs=filecmp.dircmp(dir1,dir2)

        dir1_only=cmpobs.left_only

        dir1_diff=cmpobs.diff_files

        [diffFilesList.append(os.path.join(os.path.abspath(dir1),a)) for a in dir1_diff]

        [diffFilesList.append(os.path.join(os.path.abspath(dir1),a)) for a in dir1_only]


        if len(cmpobs.common_dirs) > 0:

            for a in cmpobs.common_dirs:

                commpare(os.path.abspath(os.path.join(dir1,a)),os.path.abspath(os.path.join(dir2,a)))

        return diffFilesList


    def main():

        if len(sys.argv) < 3:

            print "Plese use %s sourcedir backdir" % sys.argv[0]

            sys.exit()

        else:

            dir1=os.path.abspath(sys.argv[1])

            dir2=os.path.abspath(sys.argv[2])

        ifMakeDir = True

        while ifMakeDir:

            diffFilesList = []

            destinationFiles = []

            ifMakeDir=False

            sourceFiles=commpare(dir1,dir2)


            for a in sourceFiles:

                destinationFile=re.sub(dir1,dir2,a)

                destinationFiles.append(destinationFile)

                if os.path.isdir(a):

                    if not os.path.exists(destinationFile):

                        os.makedirs(destinationFile)

                        print "Make dir %s" % destinationFile

                        ifMakeDir=True


        destinationFiles = []

        sourceFiles=[]

        sourceFiles=commpare(dir1,dir2)


        [ destinationFiles.append(re.sub(dir1,dir2,a)) for a in sourceFiles]

        for a,b in zip(sourceFiles,destinationFiles):

            if os.path.isfile(a):

                print "Copy file %s to %s" % (a,b)

                shutil.copyfile(a,b)


        #print sourceFiles,destinationFiles


    if __name__ == '__main__':

        main()

    ---------------------------------------------------------------------------------------------------------

    直接看效果:

    [root@localhost tmp]# pwd

    /tmp

    [root@localhost tmp]# tree testsyncfile/

    testsyncfile/

    ├── destinationfiles

    └── sourcefiles

        ├── file

        └── test1

            ├── file1

            └── test2

                ├── file2

                └── test3

    5 directories, 3 files


    [root@localhost tmp]# python syncfile.py /tmp/testsyncfile/sourcefiles testsyncfile/destinationfiles/

    Make dir /tmp/testsyncfile/destinationfiles/test1

    Make dir /tmp/testsyncfile/destinationfiles/test1/test2

    Make dir /tmp/testsyncfile/destinationfiles/test1/test2/test3

    Copy file /tmp/testsyncfile/sourcefiles/file to /tmp/testsyncfile/destinationfiles/file

    Copy file /tmp/testsyncfile/sourcefiles/file to /tmp/testsyncfile/destinationfiles/file

    Copy file /tmp/testsyncfile/sourcefiles/test1/file1 to /tmp/testsyncfile/destinationfiles/test1/file1

    Copy file /tmp/testsyncfile/sourcefiles/file to /tmp/testsyncfile/destinationfiles/file

    Copy file /tmp/testsyncfile/sourcefiles/test1/file1 to /tmp/testsyncfile/destinationfiles/test1/file1

    Copy file /tmp/testsyncfile/sourcefiles/test1/test2/file2 to /tmp/testsyncfile/destinationfiles/test1/test2/file2

    Copy file /tmp/testsyncfile/sourcefiles/file to /tmp/testsyncfile/destinationfiles/file

    Copy file /tmp/testsyncfile/sourcefiles/test1/file1 to /tmp/testsyncfile/destinationfiles/test1/file1

    Copy file /tmp/testsyncfile/sourcefiles/test1/test2/file2 to /tmp/testsyncfile/destinationfiles/test1/test2/file2

    Copy file /tmp/testsyncfile/sourcefiles/file to /tmp/testsyncfile/destinationfiles/file

    Copy file /tmp/testsyncfile/sourcefiles/test1/file1 to /tmp/testsyncfile/destinationfiles/test1/file1

    Copy file /tmp/testsyncfile/sourcefiles/test1/test2/file2 to /tmp/testsyncfile/destinationfiles/test1/test2/file2

    [root@localhost tmp]# tree testsyncfile/

    testsyncfile/

    ├── destinationfiles

    │   ├── file

    │   └── test1

    │       ├── file1

    │       └── test2

    │           ├── file2

    │           └── test3

    └── sourcefiles

        ├── file

        └── test1

            ├── file1

            └── test2

                ├── file2

                └── test3


    8 directories, 6 files

    ----------------------------------------------------------------------------------------------------------

    简单说明下脚本:

        简单说明下脚本,脚本对源数据与目的数据做对比,有差异的文件做替换和新增,对目录做新增。但对于目的数据多余的目录和文件,脚本不错处理。希望使用脚本的人能根据自己的场景灵活运用。

        刚开始写博客,写的比较草率,后续将分享更加生动的文章!

        对于这篇文章大家有疑问或者建议欢迎留言。


    个人博客已转:https://www.jianshu.com/u/a51d22784690

关键字

上一篇: python---list()用法

下一篇: Python实现栈