Делал когда-то нечто похожее. Может поможет:
def treecopy(src='', dst='', mask='*.*'):
names = os.listdir(src)
if os.path.exists(dst) != True:
os.mkdir(dst)
print 'Create dir', dst
for name in names:
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
if os.path.isdir(srcname):
treecopy(srcname, dst, mask)
else:
if fnmatch.fnmatch(`name`, `mask`):
if os.path.exists(dstname) == True:
print 'File exists', dstname
continue
shutil.copy2(srcname, dstname)
except (IOError, os.error), why:
print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))