工程文件里面,除了代码,文档外,有很多垃圾文件,比如VC project里面的ncb,obj,pch等,要想备份文件夹,还得把它们剔出,特别麻烦.这个脚本我一直都用,可以把打包不同的文件夹,包括子目录,支持自定义保存的文件类型.它会自动把备份文件压缩成zip格式
下载: pack.py
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
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() |