mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Module 'shutil' -- utility functions usable in a shell-like program
 | 
						|
 | 
						|
import os
 | 
						|
 | 
						|
MODEBITS = 010000	# Lower 12 mode bits
 | 
						|
# Change this to 01000 (9 mode bits) to avoid copying setuid etc.
 | 
						|
 | 
						|
# Copy data from src to dst
 | 
						|
#
 | 
						|
def copyfile(src, dst):
 | 
						|
	fsrc = open(src, 'r')
 | 
						|
	fdst = open(dst, 'w')
 | 
						|
	while 1:
 | 
						|
		buf = fsrc.read(16*1024)
 | 
						|
		if not buf: break
 | 
						|
		fdst.write(buf)
 | 
						|
 | 
						|
# Copy mode bits from src to dst
 | 
						|
#
 | 
						|
def copymode(src, dst):
 | 
						|
	st = os.stat(src)
 | 
						|
	mode = divmod(st[0], MODEBITS)[1]
 | 
						|
	os.chmod(dst, mode)
 | 
						|
 | 
						|
# Copy all stat info (mode bits, atime and mtime) from src to dst
 | 
						|
#
 | 
						|
def copystat(src, dst):
 | 
						|
	st = os.stat(src)
 | 
						|
	mode = divmod(st[0], MODEBITS)[1]
 | 
						|
	os.chmod(dst, mode)
 | 
						|
	os.utime(dst, st[7:9])
 | 
						|
 | 
						|
# Copy data and mode bits ("cp src dst")
 | 
						|
#
 | 
						|
def copy(src, dst):
 | 
						|
	copyfile(src, dst)
 | 
						|
	copymode(src, dst)
 | 
						|
 | 
						|
# Copy data and all stat info ("cp -p src dst")
 | 
						|
#
 | 
						|
def copy2(src, dst):
 | 
						|
	copyfile(src, dst)
 | 
						|
	copystat(src, dst)
 | 
						|
 | 
						|
# Recursively copy a directory tree.
 | 
						|
# The destination must not already exist.
 | 
						|
#
 | 
						|
def copytree(src, dst):
 | 
						|
	names = os.listdir(src)
 | 
						|
	os.mkdir(dst, 0777)
 | 
						|
	dot_dotdot = (os.curdir, os.pardir)
 | 
						|
	for name in names:
 | 
						|
		if name not in dot_dotdot:
 | 
						|
			srcname = os.path.join(src, name)
 | 
						|
			dstname = os.path.join(dst, name)
 | 
						|
			#print 'Copying', srcname, 'to', dstname
 | 
						|
			try:
 | 
						|
				#if os.path.islink(srcname):
 | 
						|
				#	linkto = os.readlink(srcname)
 | 
						|
				#	os.symlink(linkto, dstname)
 | 
						|
				#elif os.path.isdir(srcname):
 | 
						|
				if os.path.isdir(srcname):
 | 
						|
					copytree(srcname, dstname)
 | 
						|
				else:
 | 
						|
					copy2(srcname, dstname)
 | 
						|
				# XXX What about devices, sockets etc.?
 | 
						|
			except os.error, why:
 | 
						|
				print 'Could not copy', srcname, 'to', dstname,
 | 
						|
				print '(', why[1], ')'
 |