Svn 命令行递归删除匹配的文件和目录
如何递归删除符合特定模式的所有文件和目录?e、 g.删除所有“.svn”目录及其包含的文件 (仅限DOS)在*nix或Cygwin上:Svn 命令行递归删除匹配的文件和目录,svn,command-line,file,recursion,dos,Svn,Command Line,File,Recursion,Dos,如何递归删除符合特定模式的所有文件和目录?e、 g.删除所有“.svn”目录及其包含的文件 (仅限DOS)在*nix或Cygwin上: find -name .svn -print0 | xargs -0 rm -rf 像这样的东西可能会奏效,但当然要小心 find . -name ".svn" -exec rm -rf {} \; 首先尝试以下方法进行试运行: find . -name ".*" -exec echo {} \; 请注意,空大括号将用文件名填充,转义分号将结束执行的命令(
find -name .svn -print0 | xargs -0 rm -rf
像这样的东西可能会奏效,但当然要小心
find . -name ".svn" -exec rm -rf {} \;
首先尝试以下方法进行试运行:
find . -name ".*" -exec echo {} \;
请注意,空大括号将用文件名填充,转义分号将结束执行的命令(从“-exec”之后开始)。这是Unix还是Windows?在Unix上,一个简单的解决方案是
find . -name '.svn' -type d | xargs rm -rf
这将递归搜索层次结构中从“.”(当前目录)开始的所有目录(-type d),并查找名称为“.svn”的目录;然后将找到的目录列表馈送到rm-rf以进行删除
如果你想试试,试试看
find . -name '.svn' -type d | xargs echo
这将为您提供一个将被递归删除的所有目录的列表。如果您的文件处于subversion中,则从存储库中进行导出将为您提供一个目录树,其中.svn文件和任何其他积垢将被删除。因为您正在寻找DOS解决方案,上周的帖子几乎一模一样,大家的共识是: 对于/d/r.%如果存在,则在(.svn)do@ %d“rd/s/q”%d“ 或 对于/f“usebackq”%d in(“目录svn /ad/b/s“)执行rd/s/q“%d” 实际上,SVN还为您提供了导出工作目录的选项,而不导出.SVN/\u SVN目录 三年后的回忆:
我认为,人们最终需要递归删除.svn/_svn文件夹的原因是,他们直接将本地工作副本复制到了一个新位置,以便将修改后的版本与干净的导出进行文件夹比较,即在修改后的本地工作副本出现问题之后。(至少这就是我需要它的原因。如果可能的话,只使用“svn导出”肯定更容易/更快。)如果您想复制它而不导出并从项目中删除.svn,您应该使用XCOPY中的/EXCLUDE选项 像这样:
xcopy /S/Q/EXCLUDE:svn.excludelist [path_from] [path_to\]
观察[路径到]上的“\”(反斜杠)。它确定它是一个输出目录,所以xcopy不会质疑它是一个文件还是一个目录
svn.excludelist是一个文本文件,其中包含要在副本上忽略的模式,这些模式由行分隔
例如:
.svn
.svn\
\.svn\
.obj
.o
.lib
\src\
等等……这对我来说非常有效。谢谢我需要删除所有“CVS”目录,所以我运行了一个查找-名称“CVS”-exec rm-rf{}\;“实际上,很明显,OrtoiseSVN还提供了导出工作目录而不使用.svn/_svn目录的选项。”我相信这是svn本身(
svn export
)的一个功能,不仅仅是OrtoiseSVN,所以任何其他客户机也可以这样做。这很好!Windows资源管理器并不总是删除.svn内容。如果我想使用此命令递归删除文件名,请尝试本文档中“我必须修改的内容”中建议的硬核DOS变体?目前这项工作只针对Folders我不止一次需要核取所有.svn目录,因为TortoiseSvn会阻塞本地存储库,这通常是由于应用程序在运行中崩溃,用户试图以奇怪的方式进行分支,或者用户错误地恢复或恢复。我投了赞成票,因为我在Win32上寻找相同的问题,但安装了gnutils——所以这对我来说非常有效。伙计,纯DOS太疯狂了!升级投票-我需要一个基于unix的解决方案来摆脱糟糕的eclipse.project和.settings文件。谢谢DDOWN投票错误使用rm
+xargs
+find
。在这种情况下,通常应该使用-print0
和NUL
终止,否则这只是一场等待发生的灾难。@Meltemi已经有一段时间了,但是1)这个问题需要一个通用的解决方案,“.svn”只是一个例子,2)*nix文件名可以包含几乎任何内容,除了NULL
字节和正斜杠。对于这一点,空格是有害的,例如名称中带有空格字符的目录在层次结构中的某个位置命名为foobar
,在当前目录中命名为bar
。然后搜索foo*
,它将some/path/foo-bar
馈送到rm
,第一次自动失败并删除bar
。请参阅下面greyfade的答案,或者使用GNU find.ok的-delete
,开始有意义了。我今天需要做一些类似的事情,不知道-print0
或-0
标志意味着什么,而且很难找到文档。在Mac电脑上,很多(大多数?)文件/目录中都有空格符……所以你的评论激起了我的好奇心#FunWithUnix请注意,导出的版本将不包含工作目录中可能存在的任何未限制更改(为此,您需要提交然后导出),在此处仅对适当的查找+rm
进行升级投票。