mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +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], ')'
 | 
