diff options
Diffstat (limited to 'Mac/Extras.install.py')
-rw-r--r-- | Mac/Extras.install.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Mac/Extras.install.py b/Mac/Extras.install.py new file mode 100644 index 0000000..ce00af3 --- /dev/null +++ b/Mac/Extras.install.py @@ -0,0 +1,54 @@ +"""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() |