mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Recursively copy a directory but skip undesired files and
 | |
| directories (CVS, backup files, pyc files, etc)"""
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| import shutil
 | |
| 
 | |
| verbose = 1
 | |
| debug = 0
 | |
| 
 | |
| def isclean(name):
 | |
|     if name == 'CVS': return 0
 | |
|     if name == '.cvsignore': return 0
 | |
|     if name == '.DS_store': return 0
 | |
|     if name == '.svn': return 0
 | |
|     if name.endswith('~'): return 0
 | |
|     if name.endswith('.BAK'): return 0
 | |
|     if name.endswith('.pyc'): return 0
 | |
|     if name.endswith('.pyo'): return 0
 | |
|     if name.endswith('.orig'): return 0
 | |
|     return 1
 | |
| 
 | |
| def copycleandir(src, dst):
 | |
|     for cursrc, dirs, files in os.walk(src):
 | |
|         assert cursrc.startswith(src)
 | |
|         curdst = dst + cursrc[len(src):]
 | |
|         if verbose:
 | |
|             print("mkdir", curdst)
 | |
|         if not debug:
 | |
|             if not os.path.exists(curdst):
 | |
|                 os.makedirs(curdst)
 | |
|         for fn in files:
 | |
|             if isclean(fn):
 | |
|                 if verbose:
 | |
|                     print("copy", os.path.join(cursrc, fn), os.path.join(curdst, fn))
 | |
|                 if not debug:
 | |
|                     shutil.copy2(os.path.join(cursrc, fn), os.path.join(curdst, fn))
 | |
|             else:
 | |
|                 if verbose:
 | |
|                     print("skipfile", os.path.join(cursrc, fn))
 | |
|         for i in range(len(dirs)-1, -1, -1):
 | |
|             if not isclean(dirs[i]):
 | |
|                 if verbose:
 | |
|                     print("skipdir", os.path.join(cursrc, dirs[i]))
 | |
|                 del dirs[i]
 | |
| 
 | |
| def main():
 | |
|     if len(sys.argv) != 3:
 | |
|         sys.stderr.write("Usage: %s srcdir dstdir\n" % sys.argv[0])
 | |
|         sys.exit(1)
 | |
|     copycleandir(sys.argv[1], sys.argv[2])
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 | 
