Welcome, guest | Sign In | My Account | Store | Cart

Automate copy and paste file with erase the content of file if exists on destination directory. Like shutil.copytree but when dir is exists on destination tree , don't fail, just pass.

Python, 40 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os
import sys
import shutil


__doc__ = """ copy all files from  directory to an destination ,
It recreate directory tree of src to dst and replace or create file in this directory
If you have tree like this
src/A/dir/file
src/B/dir/sdir/file2
src/B/dir/file
and
then after script src dst 
dst/dir/file
dst/dir/sdir/file2 -> this is the B file2 wich is taken"""

def copytree(src, dst):
    
    if os.path.isdir(src):
        if not os.path.exists(dst):
            os.makedirs(dst)
        for name in os.listdir(src):
            copytree(os.path.join(src, name),
                     os.path.join(dst, name))
    else:
        shutil.copyfile(src, dst)

def main(dsrc, ddst):
    for dirname in os.listdir(dsrc):
        tocopy = os.path.join(dsrc, dirname)
        for d in os.listdir(tocopy):
            src = os.path.join(tocopy,d)
            dst = os.path.join(ddst,d)
            if os.path.isdir(src):
                copytree(src, dst)

if __name__ == '__main__':
    src = sys.argv[1]
    dst = sys.argv[2]
    main(src, dst)
    

copy all files from directory to an destination , It recreate directory tree of src to dst and replace or create file in this directory If you have tree like this src/A/dir/file src/B/dir/sdir/file2 src/B/dir/file and then after script src dst dst/dir/file dst/dir/sdir/file2 -> this is the B file2 wich is taken