import osimport shutilimport datetime''' 作用:將目錄備份到其他路徑。實際效果:假設給定目錄"/media/data/programmer/project/python" ,備份路徑"/home/diegoyun/backup/“ ,則會將python目錄備份到備份路徑下,形如:/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz ..用法:更改這兩個參數.backdir:備份目的地.copydirs:想要備份的檔案夾.''' def mainLogic(): # add dirs you want to copy backdir = " d:\\test " print (backdir) copydirs = [] copydirs.append( " d:\\temp " ); # copydirs.append("d:\\test"); print ( " Copying files =================== " ) start = datetime.datetime.now() # gen a data folder for backup backdir = os.path.join(backdir,start.strftime( " %Y-%m-%d " )) # print("backdir is:"+backdir) kc = 0 for d in copydirs: kc = kc + copyFiles(d,backdir) end = datetime.datetime.now() print ( " Finished! =================== " ) print ( " Total files : " + str(kc) ) print ( " Elapsed time : " + str((end - start).seconds) + " seconds " )def copyFiles(copydir,backdir): prefix = getPathPrefix(copydir) # print("prefix is:"+prefix ) i = 0 for dirpath,dirnames,filenames in os.walk(copydir): for name in filenames: oldpath = os.path.join(dirpath,name) newpath = omitPrefix(dirpath,prefix) print ( " backdir is: " + backdir ) newpath = os.path.join(backdir,newpath) print ( " newpath is: " + newpath) if os.path.exists(newpath) != True: os.makedirs(newpath) newpath = os.path.join(newpath,name) print ( " From: " + oldpath + " to: " + newpath) shutil.copyfile(oldpath,newpath) i = i + 1 return i def getPathPrefix(fullpath): # Giving /media/data/programmer/project/ , get the prefix # /media/data/programmer/ l = fullpath.split(os.path.sep) # print(str(l[-1]=="") if l[ - 1 ] == "" : tmp = l[ - 2 ] else : tmp = l[ - 1 ] return fullpath[0:len(fullpath) - len(tmp) - 1 ]def omitPrefix(fullpath,prefix): # Giving /media/data/programmer/project/python/tutotial/file/test.py , # and prefix is Giving /media/data/programmer/project/, # return path as python/tutotial/file/test.py return fullpath[len(prefix) + 1 :]mainLogic()