`
darklinden
  • 浏览: 2457 次
  • 性别: Icon_minigender_1
  • 来自: 安阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

windows下清理svn文件夹的python脚本

阅读更多
用svn也是不短的时间了,有喜有忧,其中导出也是个麻烦事

文件夹里很多不能上传的文件夹都是设置的忽略(数据库连接信息等,由于用的是公用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')
  
分享到:
评论
15 楼 chen88358323 2011-01-06  
liukai 写道
@echo on
color 2f
mode con: cols=80 lines=25
@REM
@echo 正在清理SVN文件,请稍候......
@rem 循环删除当前目录及子目录下所有的SVN文件
@rem for /r . %%a in (.) do @if exist "%%a\.svn" @echo "%%a\.svn"
@for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
@echo 清理完毕!!!
@pause

+1 比命令行的高效的多!
14 楼 Silverside 2010-12-31  
楼上是batch文件的语法吗?
好久没用这个东西了
13 楼 liukai 2010-12-28  
@echo on
color 2f
mode con: cols=80 lines=25
@REM
@echo 正在清理SVN文件,请稍候......
@rem 循环删除当前目录及子目录下所有的SVN文件
@rem for /r . %%a in (.) do @if exist "%%a\.svn" @echo "%%a\.svn"
@for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
@echo 清理完毕!!!
@pause
12 楼 lxs647 2010-12-24  
经过测试,通过自身的导出功能的确是可以、、、、、、、、、O(∩_∩)O哈哈~

花了2 min 28s
源文件:1.16G
11 楼 kevin1988620 2010-12-17  
find -name .svn |xargs rm -rf
10 楼 OuYangGod 2010-12-17  
find . -depth -type d -name '.svn' -exec rm -rf {} \;
9 楼 canpeng 2010-12-16  
del /S */.svn

好像del命令就能删除了
8 楼 我不是楚留香 2010-12-15  
@for /r .  %%I in (.svn) do if exist "%%I" rd/s/q "%%I"
7 楼 darklinden 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么
6 楼 darklinden 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服务器导出到本地


又测试了几次,我汗。。。
以前导出都是习惯性查看版本库导出。。。然后所有的忽略文件都没被导出。。。
直接在文件夹上选导出导出的就是本地的文件啊,受教了。。。
5 楼 luciferdevil 2010-12-14  
虽然没有接触过svn一直在用git,删除目录底下所有.svn文件在windows下不是可以这样嘛
del /s /q *.svn
4 楼 yadsun 2010-12-14  
liwenjun 写道
直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。



正解。SVN自带导出命令,是从本地导出到本地,而不是从svn服务器导出到本地
3 楼 wtao 2010-12-14  
find . -name .svn | xargs rm -rf
2 楼 liwenjun 2010-12-10  
直接用svn的export功能,导出的文件无.svn目录。
这样更方便,也不必借助外部工具。

1 楼 oaklet 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”目录删除

相关推荐

    SVN清除.svn的python代码

    综上所述,这段Python脚本不仅展示了如何有效地处理文件系统操作,还体现了跨平台编程时的注意事项,特别是在Windows环境下对文件权限的处理。通过学习和理解此类脚本,可以提升开发者在实际项目中处理类似问题的...

    清除.svn文件夹

    5. **自动清除工具**:可以编写脚本,比如bash、Python或批处理文件,遍历指定目录下的所有子目录,查找并删除.svn文件夹。 6. **注册表文件**:`.reg`文件用于导入或导出Windows注册表项,谨慎使用,因为它可以...

    删除目录下所有svn相关的文件夹

    当我们说到"删除目录下所有svn相关的文件夹",我们通常是指清理不再需要的`.svn`隐藏目录。这些目录在每个被SVN控制的子目录中存在,用于存储版本信息。如果你不再需要这些版本控制信息,或者想要彻底移除与SVN的...

    移除文件夹的Git或SVN信息

    尽管Git的大部分信息存储在文件系统中,但SVN的一些设置可能与Windows注册表有关,所以这两个脚本可能是用来清理与Git和SVN相关的注册表键值的。 要使用这些`.reg`文件,你需要右键点击它们并选择“合并”,然后...

    如何删除SVN连接,即工程下的所有.svn文件

    - 自定义批处理脚本或Python、Perl等编程语言的脚本,遍历指定目录及其子目录,删除.svn文件夹。 - 使用专门的清理工具,如`svn-clean`或第三方软件,它们设计了安全的方式来处理这种情况。 7. **注意事项**: -...

    SVN版本控制清除工具

    在某些情况下,可能需要清理文件夹中的.SVN子目录,这通常是由于不再需要这些版本控制信息,或者为了减小文件夹大小。以下是对SVN和如何处理.SVN子目录的详细解释: 1. SVN基础知识: - 版本控制:SVN是开源的版本...

    删除.svn文件

    1. **手动删除**:打开文件资源管理器,找到包含.svn目录的工作副本,进入每个子目录,手动选中.svn文件夹并进行删除。但是这种方法耗时且容易出错,不推荐对大量文件使用。 2. **命令行删除**:如果你熟悉Windows...

    批量删除.svn

    在使用SVN管理项目时,我们会在项目目录下生成许多以`.svn`为扩展名的隐藏文件和文件夹,它们用于存储版本信息、元数据等。然而,在某些情况下,我们可能需要批量删除这些`.svn`文件,例如在不使用SVN或者准备将项目...

    删除.svn文件的方法

    例如,可以使用Python、Bash或其他编程语言编写一个遍历目录并删除`.svn`的脚本。 4. **利用工具**:有一些专门的清理工具,如`svn-clean`(Unix-like系统)或`svnadmin`(Windows),可以帮助用户安全地删除`.svn`...

    删除项目中的SVN目录

    描述中提到的“简单的删除.svn文件的小程序”是一种自动化工具,可能是用某种编程语言(如Python、批处理脚本等)编写,它的主要功能是遍历项目文件夹,查找并移除所有.svn子目录,从而简化项目文件结构,方便进行...

    SVN使用手册中文版快速入门

    在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL...

    SVN使用手册中文版.chm

    在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL...

    python 文件实用包

    本文将深入探讨“python 文件实用包”所涵盖的四个主要功能:批量重命名、清除SVN相关文件、文件内容查找与替换以及按规则批量删除文件或目录。 1. 批量重命名: 在日常工作中,我们经常需要对大量文件进行重命名,...

    Python复制文件操作实例详解

    假设我们要创建一个简单的自动化工具,该工具需要将debug目录下的配置文件复制到指定目录,并将Release目录下的生成文件复制到同一个目录,同时过滤掉不需要的文件夹(例如`.svn`),最后向指定目录添加几个特定的...

    Android_WebRtc编译, 配置, 编译出错

    - `python`:版本2.4或更高,用于执行构建脚本。 - `libnss3-dev`:网络安全服务库,用于身份验证和安全协议。 - `libasound2-dev`:ALSA音频库开发包,处理音频输入和输出。 - `libpulse-dev`:PulseAudio库,...

Global site tag (gtag.js) - Google Analytics