#!/usr/bin/env python import sys, os, shutil, re def usage(): print "Usage: " print sys.argv[0] + " [source [source ..]] [destination]" print "Recursively copy source to destination, while translating " print "characters for VFAT." def fatalerror(message): print "Error: " + message sys.exit() def cleanfile( filename): return re.sub('[^$%\-_@~!(){}#&A-Za-z0-9]','_',filename) if len(sys.argv) < 2: usage() sys.exit() dest = sys.argv.pop() for srcfile in sys.argv[1:]: if not os.access(srcfile,os.R_OK): fatalerror( srcfile + " is not readable." ) if os.path.isdir(srcfile): for root, dirs, files in os.walk(srcfile): # print root, dirs, files for newdir in dirs: makedir = os.path.sep.join( [ dest, cleanfile(root), cleanfile(newdir) ] ) makedir = makedir.replace('//','/') # if it already exists, great.. if not os.path.isdir( makedir ): try: print "* makedirs", makedir os.makedirs( makedir ) except Exception, e: print "ERROR: Exception in os.makedirs() %s" % e else: print "* exists", makedir for file in files: try: copysrc = os.path.join( root, file) copydst = os.path.sep.join( [ dest, cleanfile(root), cleanfile(file) ] ) copydst = copydst.replace('//','/') print "* copyfile", copysrc, copydst shutil.copyfile(copysrc, copydst) except Exception, e: print "ERROR: Exception in shutil.copyfile() %s" % e else: try: copysrc = srcfile copydst = os.path.join( dest, cleanfile(srcfile) ) print "* copyfile", copysrc, copydst shutil.copyfile(copysrc, copydst) except Exception, e: print "ERROR: Exception in shutil.copyfile() %s" % e