(root)/
Python-3.12.0/
Mac/
Extras.install.py
       1  """Recursively copy a directory but skip undesired files and
       2  directories (CVS, backup files, pyc files, etc)"""
       3  
       4  import sys
       5  import os
       6  import shutil
       7  
       8  verbose = 1
       9  debug = 0
      10  
      11  def isclean(name):
      12      if name in ('CVS', '.cvsignore', '.svn'):
      13          return 0
      14      if name.lower() == '.ds_store': return 0
      15      if name.endswith('~'): return 0
      16      if name.endswith('.BAK'): return 0
      17      if name.endswith('.pyc'): return 0
      18      if name.endswith('.pyo'): return 0
      19      if name.endswith('.orig'): return 0
      20      return 1
      21  
      22  def copycleandir(src, dst):
      23      for cursrc, dirs, files in os.walk(src):
      24          assert cursrc.startswith(src)
      25          curdst = dst + cursrc[len(src):]
      26          if verbose:
      27              print("mkdir", curdst)
      28          if not debug:
      29              if not os.path.exists(curdst):
      30                  os.makedirs(curdst)
      31          for fn in files:
      32              if isclean(fn):
      33                  if verbose:
      34                      print("copy", os.path.join(cursrc, fn), os.path.join(curdst, fn))
      35                  if not debug:
      36                      shutil.copy2(os.path.join(cursrc, fn), os.path.join(curdst, fn))
      37              else:
      38                  if verbose:
      39                      print("skipfile", os.path.join(cursrc, fn))
      40          for i in range(len(dirs)-1, -1, -1):
      41              if not isclean(dirs[i]):
      42                  if verbose:
      43                      print("skipdir", os.path.join(cursrc, dirs[i]))
      44                  del dirs[i]
      45  
      46  def main():
      47      if len(sys.argv) != 3:
      48          sys.stderr.write("Usage: %s srcdir dstdir\n" % sys.argv[0])
      49          sys.exit(1)
      50      copycleandir(sys.argv[1], sys.argv[2])
      51  
      52  if __name__ == '__main__':
      53      main()