工程文件里面,除了代码,文档外,有很多垃圾文件,比如VC project里面的ncb,obj,pch等,要想备份文件夹,还得把它们剔出,特别麻烦.这个脚本我一直都用,可以把打包不同的文件夹,包括子目录,支持自定义保存的文件类型.
它会自动把备份文件压缩成zip格式
- from dircache import listdir
- from os.path import isdir,basename,isfile,join,getsize
- from string import split,lower
- from datetime import date
- from zipfile import ZipFile,ZIP_DEFLATED
- from string import replace
- class TBackup:
- def __init__(self):
- self.list=[[]]
- self.task=[[]]
- self.filter=('h','cpp','pas','sln',\
- 'dpr','vcproj','txt','htm','dfm',\
- 'xls','doc','vsd','ini','xml','dpk','bpg',\
- 'java','jbx','jpx','py','xsd')
- self.name_str=date.today().isoformat()+'-backup.zip'
- self.init_path=''
- self.save_path=''
- def SetSavePath(self,save):
- self.save_path=save
- def addTask(self,work,filter=None):
- if not filter:filter=work
- tmp=[]
- tmp.append(work)
- tmp.append(filter)
- self.task.append(tmp)
- def add(self,file):
- p=split(basename(file),'.')
- if len(p)<2:
- return
- exd=lower(p[1])
- if exd in self.filter:
- tmp=[]
- tmp.append(file)
- tmp.append(replace(file,self.init_path,''))
- self.list.append(tmp)
- def dumy(self):
- print self.name_str
- def run(self):
- for x in self.task:
- if len(x)==2:
- self.init_path=x[1]
- self.readpath(x[0])
- self.pack()
- def readpath(self,path):
- p=listdir(path)
- for x in p:
- x=join(path,x)
- if isdir(x):
- self.readpath(x)
- elif isfile(x):
- self.add(x)
- def pack(self):
- if len(self.list)==0:
- print 'no file packed'
- return
- target= join(self.save_path,self.name_str)
- zip = ZipFile(target,'w',ZIP_DEFLATED)
- for p in self.list:
- if len(p)==2:
- print p[0]
- zip.write(p[0],p[1])
- zip.close()
- print '-----------------------------------------------------------------------'
- print "save to:",target
- print "total file:" ,len(self.list)
- ks = getsize(target)/1024.0
- ks =float(int(ks*1000)/1000)
- print '%2s kb write done!' % (ks)
说明
- self.filter是一个字符串的列表,在里面定义需要备份的文件类型,只写不带分割符号的扩展名,大小写不敏感(windows平台上)
- 用法也很简单
- from pack import TBackup
- b=TBackup()
- b.SetSavePath('F:\\work_space\\back_up')
- b.addTask('F:\\work_space\\running\\tnl\', filter='F:\\work_space\\running\')
- #这个函数需要解释一下,两个参数,
- #第一个参数是需要备份的文件夹路径,
- #第二个参数filter,则是压缩文件里面的
- #参考路径,filter='F:\\work_space\\running\\"
- #备份成功之后,打开压缩包,会看到这样
- #的目录"".tnl",如果filter='F:\\work_space\\"
- #那么会看到"running\tnl"的目录
- b.run()