def copy_tree(src, dst, preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=0, verbose=1, dry_run=0):
 from distutils.file_util import copy_file
 if ((not dry_run) and (not os.path.isdir(src))):
  raise DistutilsFileError(("cannot copy tree '%s': not a directory" % src))
 try:
  names = os.listdir(src)
 except OSError as e:
  if dry_run:
   names = []
  else:
   raise DistutilsFileError(("error listing files in '%s': %s" % (src, e.strerror)))
 if (not dry_run):
  mkpath(dst, verbose=verbose)
 outputs = []
 for n in names:
  src_name = os.path.join(src, n)
  dst_name = os.path.join(dst, n)
  if n.startswith('.nfs'):
   continue
  if (preserve_symlinks and os.path.islink(src_name)):
   link_dest = os.readlink(src_name)
   if (verbose >= 1):
    log.info('linking %s -> %s', dst_name, link_dest)
   if (not dry_run):
    os.symlink(link_dest, dst_name)
   outputs.append(dst_name)
  elif os.path.isdir(src_name):
   outputs.extend(copy_tree(src_name, dst_name, preserve_mode, preserve_times, preserve_symlinks, update, verbose=verbose, dry_run=dry_run))
  else:
   copy_file(src_name, dst_name, preserve_mode, preserve_times, update, verbose=verbose, dry_run=dry_run)
   outputs.append(dst_name)
 return outputs

def copy_tree ( src , dst , preserve_mode = 1 , preserve_times = 1 , preserve_symlinks = 0 , update = 0 , verbose = 1 , dry_run = 0 ) : from distutils . file_util import copy_file if ( ( not dry_run ) and ( not os . path . isdir ( src ) ) ) : raise DistutilsFileError ( ( "cannot copy tree '%s': not a directory" % src ) ) try : names = os . listdir ( src ) except OSError as e : if dry_run : names = [ ] else : raise DistutilsFileError ( ( "error listing files in '%s': %s" % ( src , e . strerror ) ) ) if ( not dry_run ) : mkpath ( dst , verbose = verbose ) outputs = [ ] for n in names : src_name = os . path . join ( src , n ) dst_name = os . path . join ( dst , n ) if n . startswith ( '.nfs' ) : continue if ( preserve_symlinks and os . path . islink ( src_name ) ) : link_dest = os . readlink ( src_name ) if ( verbose >= 1 ) : log . info ( 'linking %s -> %s' , dst_name , link_dest ) if ( not dry_run ) : os . symlink ( link_dest , dst_name ) outputs . append ( dst_name ) elif os . path . isdir ( src_name ) : outputs . extend ( copy_tree ( src_name , dst_name , preserve_mode , preserve_times , preserve_symlinks , update , verbose = verbose , dry_run = dry_run ) ) else : copy_file ( src_name , dst_name , preserve_mode , preserve_times , update , verbose = verbose , dry_run = dry_run ) outputs . append ( dst_name ) return outputs
copy a src tree to the dst folder .