精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-06
文件夹里很多不能上传的文件夹都是设置的忽略(数据库连接信息等,由于用的是公用svn服务器),导出的话是看不到的,直接拷贝带svn文件夹的源目录,占用空间又至少是有用文件的两倍大小。。。 于是次次搜索.svn然后删除 后来看到个添加鼠标右键菜单的reg代码,好用是好用,迷糊的时候手一滑就game over了。。。要检出一份然后手动去添加忽略文件。。。杀人了啊。。。 看网上用python脚本写svn清理的比较多,于是学着写了个,貌似网上的脚本都是针对linux的,这个windows版的也发出来,请多指教 # -*- coding: cp936 -*- # 注明字符集 # file:clearsvn.py 删除svn目录下的所有svn文件 import os,win32con,win32api #清除文件名头尾的引号 def trimpath(pathin): #如果头部存在引号 if pathin[0] == '\"': pathin = pathin[1:] #如果尾部存在引号 if pathin[(len(pathin)-1)] == '\"': pathin = pathin[:(len(pathin)-1)] #返回清理首尾后的字串 return pathin def clearsvn(path): #列出子目录 filenames = os.listdir(path) for singlefile in filenames: pathfile = path + '\\' + singlefile #子目录判断是否为svn文件夹 if os.path.isdir(pathfile): if singlefile.find('.svn') != -1: #是的话清理文件夹后删除文件夹 deltree(pathfile) print "清理目录:" + pathfile #修改属性,同linux下chmod win32api.SetFileAttributes(pathfile, win32con.FILE_ATTRIBUTE_NORMAL) #api删除空文件夹 os.rmdir(pathfile) else: #不是的话递归到下一层 clearsvn(pathfile) def deltree(path): filenames = os.listdir(path) #遍历所有子目录和文件夹 for singlefile in filenames: pathfile = path + '\\' + singlefile #如果是文件夹的话递归清理 if os.path.isdir(pathfile): print "清理目录:" + pathfile #修改属性,同linux下chmod win32api.SetFileAttributes(pathfile, win32con.FILE_ATTRIBUTE_NORMAL) #递归到下一层 deltree(pathfile) #api删除空文件夹 os.rmdir(pathfile) #如果是文件的话则删除 if os.path.isfile(pathfile): print "删除文件:" + pathfile #修改属性,同linux下chmod win32api.SetFileAttributes(pathfile, win32con.FILE_ATTRIBUTE_NORMAL) #api删除文件 os.remove(pathfile) if __name__=="__main__": #提示用户输入目录路径 pathin = raw_input("拖放要删除文件所在目录到此:") #清理字串首尾的引号 path = trimpath(pathin) #确认文件夹 choose = raw_input("需要清理的文件夹为 [ " + path + " ] y/n?:") if choose == 'y' or choose == 'Y': #检查用户输入的目录是否存在,如果不存在则退出程序 if os.path.exists(path)==False: print "输入的目录不存在!" os._exit(1) #遍历子文件夹进行删除 clearsvn(path) print "清理完成!" #运行结束暂停,显示友好信息 os.system('pause') 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-09
最后修改:2010-12-09
整得有点复杂化了,我经常用的:
# coding:gbk import os import shutil svnroot = "." targetdirs = [] for path, dirs, files in os.walk(svnroot): for ad in dirs: currdir = os.path.join(path, ad) if ad==".svn": print currdir targetdirs.append(currdir) for cd in targetdirs: shutil.rmtree(cd) 粘到要清理的文件夹下运行就会把当前文件夹下所有“.svn”目录删除 |
|
返回顶楼 | |
发表时间:2010-12-10
直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。 |
|
返回顶楼 | |
发表时间:2010-12-14
find . -name .svn | xargs rm -rf
|
|
返回顶楼 | |
发表时间:2010-12-14
liwenjun 写道 直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。 正解。SVN自带导出命令,是从本地导出到本地,而不是从svn服务器导出到本地 |
|
返回顶楼 | |
发表时间:2010-12-14
虽然没有接触过svn一直在用git,删除目录底下所有.svn文件在windows下不是可以这样嘛
del /s /q *.svn |
|
返回顶楼 | |
发表时间:2010-12-14
oaklet 写道 整得有点复杂化了,我经常用的:
# coding:gbk import os import shutil svnroot = "." targetdirs = [] for path, dirs, files in os.walk(svnroot): for ad in dirs: currdir = os.path.join(path, ad) if ad==".svn": print currdir targetdirs.append(currdir) for cd in targetdirs: shutil.rmtree(cd) 粘到要清理的文件夹下运行就会把当前文件夹下所有“.svn”目录删除 经测试,还是老问题,在删除时由于svn文件夹内文件属性为隐藏存档,删除出错 yadsun 写道 liwenjun 写道 直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。 正解。SVN自带导出命令,是从本地导出到本地,而不是从svn服务器导出到本地 又测试了几次,我汗。。。 以前导出都是习惯性查看版本库导出。。。然后所有的忽略文件都没被导出。。。 直接在文件夹上选导出导出的就是本地的文件啊,受教了。。。 |
|
返回顶楼 | |
发表时间:2010-12-14
yadsun 写道 liwenjun 写道 直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。 正解。SVN自带导出命令,是从本地导出到本地,而不是从svn服务器导出到本地 又试了几次。。。导出一个2-8层目录的svn目录(常用的),内部N个文件夹,总大小在40M左右,导出了2分钟。。。 直接拖一个副本删除svn文件貌似快多了。。。 luciferdevil 写道 虽然没有接触过svn一直在用git,删除目录底下所有.svn文件在windows下不是可以这样嘛
del /s /q *.svn svn的本地处理方式是在每个文件夹下建立.svn文件夹,内部存储的是同级目录下的文件备份和版本信息。 svn在网上查找常用的处理方式是一个注册表导入,添加鼠标右键菜单,用的也是cmd命令,我也在用,只是人较迷糊,误点一次差点郁闷死。。。其实写个bat更简单,但这不是想用python么 |
|
返回顶楼 | |
发表时间:2010-12-15
@for /r . %%I in (.svn) do if exist "%%I" rd/s/q "%%I"
|
|
返回顶楼 | |
发表时间:2010-12-16
del /S */.svn
好像del命令就能删除了 |
|
返回顶楼 | |