在Windows上以递归方式删除所有.svn目录的命令


75

我有一个包含许多子目录的目录。在每个文件夹中都有一个Subversion文件夹(.svn)。

Windows中是否有一条命令会通过每个文件夹和子目录并删除.svn文件夹?

还是我必须创建一个脚本或手动执行?


4
如果必须不要编写脚本,则只在根文件夹中搜索“ .svn”,然后选择所有结果并删除。
JB Nizet'2

1
您可能还对svn导出命令(svnbook.red-bean.com/en/1.0/re10.html)感兴趣,该命令将目录复制到另一个位置,但没有所有.svn目录。
JB Nizet

@JB Nizet:您应该创建一个答案,以便人们可以投票,而不是添加评论。评论是对问题的评论,例如,当尚不清楚时
Sander Rijken 2011年

[从所有目录中删除.svn文件的可能复制](stackoverflow.com/questions/1301203/…
Sander Rijken 2011年

1
@ user538442请考虑更改您接受的答案
Brian

Answers:


30

使用svn export命令将Subversion工作副本导出到没有目录的新“干净”目录结构中.svn


5
这可能不是他想要的。我想要相同的东西,因此可以将一些已修改的代码检入另一个SVN位置。
鲍比·坎农

您可以在svn export
Sander Rijken 2011年

3
该命令不会从磁盘上获取现有文件,而是从存储库中的最新版本创建一个副本。您应该使用过svn export WCPath NewPath
Sander Rijken 2011年

4
如果您有权访问原始存储库,则“ svn导出”效果很好。有时我会收到包含.svn目录的代码转储,这些目录指向我无法访问的存储库。在这种情况下,批处理文件或powershell答案之一就是解决方法。
凯文

8
这不能回答实际问题。例如,我收到了文件夹树,但不使用SVN。因此,“导出”命令对我不可用。
Rid Iculous

174

用以下行制作一个litt批处理文件,并从存在.svn目录的父文件夹中执行该文件。

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%%G"

您也可以直接从命令提示符处发出以下行:

FOR /F "tokens=*" %G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%G"

1
非常感谢。那就是我真正想要的。由于某种原因,我从svn存储库断开了连接,并且由于这个原因没有时间进行研发。现在,我使用Filezilla通过此命令上传没有任何.svn文件夹的完整项目。再次感谢
MK Garwa 2013年

谢谢你 不胜感激。给我一个带有.svn的文件夹树,但实际上并未使用它。在Win中搜索.svn(无论打开或关闭显示隐藏文件)均返回零结果。命令行提示符就成功了!
Rid Iculous

太棒了 最简单有效的方法。在Google中搜索“ windows cmd递归删除文件夹”,但实际上我想删除.svn,爱到搜索引擎将我的意思纠正到这一点时:)
Armfoot

1
谢谢!提示:要打开所需文件夹中的cmd,请按住shift键并从Windows资源管理器中单击该文件夹,然后选择“在此处打开命令窗口”。在cmd.exe上,您可以用鼠标右键单击以粘贴共享的第二个命令@ Ajit / @ izilotti。像魅力一样工作(win7)
Jorge Orpinel 2014年

4
这个答案应该是“最佳答案”
mujaffars 2015年

48

在PowerShell中执行此操作。

注意:这是递归的,因此请确保您在正确的目录中!

gci -fil '.svn' -r -force | ri -r -force

这是我的源代码树清理脚本的其余部分。

gci -fil 'bin' -r -force | ri -r -force
gci -fil 'obj' -r -force | ri -r -force
gci -fil '_ReSharper*' -r -force | ri -r -force
gci -fil '*.suo' -r -force | ri -r -force
gci -fil '*.user' -r -force | ri -r -force

注意:如果您的路径包含超过260个字符,则将获得RemoveItem PathTooLongException。
bluelDe

10

如果要删除Windows中所有名为.svn的子文件夹,请使用以下内容创建批处理文件:

for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *.svn') do (
rd /s /q "%%i"
)

将其保存在文件del_All_Dot_SVN_Folders.cmd中。运行。你完成了。

感谢http://www.axelscript.com/2008/03/11/delete-all-svn-files-in-windows/

请记住,上面的代码具有.svn,而链接中的代码只有* svn,因此最好不要使.svn意外产生不良影响。


9

只需在文件资源管理器的搜索框中键入.svn,然后选择并删除所有搜索结果(请参阅JB Nizet的评论)。当然,例如在组织svn存档时,也可以使用此方法快速删除obj和bin目录。

尽管OP要求使用命令行解决方案,但他也指出要使用Windows,并考虑了手动删除,因此仍可以考虑使用File Explorer方法,尤其是因为它是最快的方法,并且不依赖svn export这样的“工具”。

尽管OP已经选择了可接受的答案,但是该答案可能对其他人仍然有用。至少这对我很有用,长期使用Linux / Windows的用户更喜欢命令行,并通过本文首次了解了搜索框:-)

带有搜索框的资源管理器屏幕截图


1

很抱歉参加聚会晚了,但以下是另外一行:

for /r %i in (.svn) do rmdir /s /q "%i"

0

我知道回答这个问题为时已晚,但是我想如果有Eclipse和在您的Eclipse上安装svn插件,这是一个简单的方法。右键单击该项目,转到“团队”->“断开连接”。它将打开一个弹出窗口,您可以在其中选择第一个选项:“还从文件系统中删除SVN元信息。” 这将自动删除所有SVN文件夹以及svn属性文件,而在仅删除.svn文件夹时,您有时可能会忘记这些文件!


-1

重要的一点是,如果要运行Shell来删除.svn文件夹,则可能需要使用-depth参数来防止find命令进入刚刚删除的目录并显示愚蠢的错误消息,例如

"find: ./.svn: No such file or directory"

要消除此错误,可以使用以下find命令:

cd [dir_to_delete_svn_folders]
find . -depth -name .svn -exec rm -fr {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.