代码改变世界

备份文件的python脚本(转)

2013-07-24 20:10  江湖么名  阅读(233)  评论(0编辑  收藏  举报

作用:将目录备份到其他路径。
实际效果:假设给定目录"/media/data/programmer/project/python" ,备份路径"/home/diegoyun/backup/“ , 则会将python目录下的文件按照全路经备份到备份路径下,形如:

/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz.....

脚本:
import os
import shutil
import datetime

def mainLogic():
    
#add dirs you want to copy
    backdir="I:\\backup"    
    copydirs
=[]
    copydirs.append(
"D:\\programmer")
    copydirs.append(
"D:\\diegoyun")    

    
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()