17db96d56Sopenharmony_ci"""Recursively copy a directory but skip undesired files and 27db96d56Sopenharmony_cidirectories (CVS, backup files, pyc files, etc)""" 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ciimport sys 57db96d56Sopenharmony_ciimport os 67db96d56Sopenharmony_ciimport shutil 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_civerbose = 1 97db96d56Sopenharmony_cidebug = 0 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_cidef isclean(name): 127db96d56Sopenharmony_ci if name in ('CVS', '.cvsignore', '.svn'): 137db96d56Sopenharmony_ci return 0 147db96d56Sopenharmony_ci if name.lower() == '.ds_store': return 0 157db96d56Sopenharmony_ci if name.endswith('~'): return 0 167db96d56Sopenharmony_ci if name.endswith('.BAK'): return 0 177db96d56Sopenharmony_ci if name.endswith('.pyc'): return 0 187db96d56Sopenharmony_ci if name.endswith('.pyo'): return 0 197db96d56Sopenharmony_ci if name.endswith('.orig'): return 0 207db96d56Sopenharmony_ci return 1 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_cidef copycleandir(src, dst): 237db96d56Sopenharmony_ci for cursrc, dirs, files in os.walk(src): 247db96d56Sopenharmony_ci assert cursrc.startswith(src) 257db96d56Sopenharmony_ci curdst = dst + cursrc[len(src):] 267db96d56Sopenharmony_ci if verbose: 277db96d56Sopenharmony_ci print("mkdir", curdst) 287db96d56Sopenharmony_ci if not debug: 297db96d56Sopenharmony_ci if not os.path.exists(curdst): 307db96d56Sopenharmony_ci os.makedirs(curdst) 317db96d56Sopenharmony_ci for fn in files: 327db96d56Sopenharmony_ci if isclean(fn): 337db96d56Sopenharmony_ci if verbose: 347db96d56Sopenharmony_ci print("copy", os.path.join(cursrc, fn), os.path.join(curdst, fn)) 357db96d56Sopenharmony_ci if not debug: 367db96d56Sopenharmony_ci shutil.copy2(os.path.join(cursrc, fn), os.path.join(curdst, fn)) 377db96d56Sopenharmony_ci else: 387db96d56Sopenharmony_ci if verbose: 397db96d56Sopenharmony_ci print("skipfile", os.path.join(cursrc, fn)) 407db96d56Sopenharmony_ci for i in range(len(dirs)-1, -1, -1): 417db96d56Sopenharmony_ci if not isclean(dirs[i]): 427db96d56Sopenharmony_ci if verbose: 437db96d56Sopenharmony_ci print("skipdir", os.path.join(cursrc, dirs[i])) 447db96d56Sopenharmony_ci del dirs[i] 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_cidef main(): 477db96d56Sopenharmony_ci if len(sys.argv) != 3: 487db96d56Sopenharmony_ci sys.stderr.write("Usage: %s srcdir dstdir\n" % sys.argv[0]) 497db96d56Sopenharmony_ci sys.exit(1) 507db96d56Sopenharmony_ci copycleandir(sys.argv[1], sys.argv[2]) 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ciif __name__ == '__main__': 537db96d56Sopenharmony_ci main() 54