1 # Module 'shutil' -- utility functions usable in a shell-like program
5 MODEBITS
= 010000 # Lower 12 mode bits
6 # Change this to 01000 (9 mode bits) to avoid copying setuid etc.
8 # Copy data from src to dst
10 def copyfile(src
, dst
):
14 buf
= fsrc
.read(16*1024)
18 # Copy mode bits from src to dst
20 def copymode(src
, dst
):
22 mode
= divmod(st
[0], MODEBITS
)[1]
25 # Copy all stat info (mode bits, atime and mtime) from src to dst
27 def copystat(src
, dst
):
29 mode
= divmod(st
[0], MODEBITS
)[1]
31 os
.utime(dst
, st
[7:9])
33 # Copy data and mode bits ("cp src dst")
39 # Copy data and all stat info ("cp -p src dst")
45 # Recursively copy a directory tree.
46 # The destination must not already exist.
48 def copytree(src
, dst
):
49 names
= os
.listdir(src
)
51 dot_dotdot
= (os
.curdir
, os
.pardir
)
53 if name
not in dot_dotdot
:
54 srcname
= os
.path
.join(src
, name
)
55 dstname
= os
.path
.join(dst
, name
)
56 #print 'Copying', srcname, 'to', dstname
58 #if os.path.islink(srcname):
59 # linkto = os.readlink(srcname)
60 # os.symlink(linkto, dstname)
61 #elif os.path.isdir(srcname):
62 if os
.path
.isdir(srcname
):
63 copytree(srcname
, dstname
)
65 copy2(srcname
, dstname
)
66 # XXX What about devices, sockets etc.?
68 print 'Could not copy', srcname
, 'to', dstname
,
69 print '(', why
[1], ')'