Python实现按原目录结构备份文件的脚本
本文介绍一个使用Python编写的文件备份脚本,能够按照原始目录结构将指定文件夹下的所有文件完整备份到目标路径。脚本利用os.walk遍历目录,并通过自定义函数处理路径前缀,确保备份后的文件层级与源目录一致。代码包含详细注释,适用于Windows和Linux环境,适合需要定期备份项目文件的开发者参考。
实际运行效果如下:假设源目录为"/media/data/programmer/project/python",目标备份路径为"/home/diegoyun/backup/",脚本会将源目录下的所有文件及其子目录结构完整复制到备份路径中,生成的备份目录结构示例如下:
/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:\\diegyun")
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()
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









