命令行以递归方式删除匹配的文件和目录

时间:2009-02-10 23:38:04

标签: svn command-line file recursion dos

如何递归删除所有文件&与某种模式匹配的目录?例如删除所有“.svn”目录及其包含的文件?

(可悲的是DOS)

6 个答案:

答案 0 :(得分:56)

由于您正在寻找DOS解决方案,上周的帖子几乎完全相同,并且达成共识:

Command line tool to delete folder with a specified name recursively in Windows?

  

/ d / r。 (.svn)中的%d确实存在@if   “%d”rd / s / q“%d”

  

表示/ f“usebackq”%d in(“dir .svn   / ad / b / s“)做rd / s / q”%d“

实际上,SVN还为您提供了导出没有.svn / _svn目录的工作目录的选项。

三年后的事后: 我认为人们最终需要以递归方式删除.svn / _svn文件夹的原因是因为他们直接将本地工作副本复制到新位置,以便对其修改后的版本与干净导出进行文件夹比较,即在使用修改后的本地工作副本出错后。 (至少这就是我需要它的原因。在可能的情况下使用'svn export'肯定更容易/更快。)

答案 1 :(得分:18)

这是Unix还是Windows?在Unix上,一个简单的解决方案是

find . -name '.svn' -type d | xargs rm -rf

以递归方式搜索从“。”开始的层次结构中的所有目录(-type d)。 (当前目录),找到名称为'.svn'的那些;然后将找到的目录列表输入rm -rf进行删除。

如果您想尝试一下,请尝试

find . -name '.svn' -type d | xargs echo

这应该为您提供 递归删除的所有目录的列表。

答案 2 :(得分:7)

如果您的文件是在subversion中,那么从存储库导出将为您提供一个目录树,其中包含.svn文件和任何其他文件。

答案 3 :(得分:6)

这样的事情可能会成功,但当然要小心!

find . -name ".svn" -exec rm -rf {} \;

首先尝试这样的事情进行干运行:

find . -name ".*" -exec echo {} \;

请注意,空括号将填入文件名,转义分号将结束执行的命令(从“-exec”开始)。

答案 4 :(得分:5)

On * nix或Cygwin:

find -name .svn -print0 | xargs -0 rm -rf

答案 5 :(得分:1)

如果要复制它而不导出并从项目中删除.svn,则应使用XCOPY中的/ EXCLUDE选项。

像这样:

xcopy /S/Q/EXCLUDE:svn.excludelist [path_from] [path_to\]

观察[path_to]上的“\”(反斜杠)。它确定它是一个输出目录,因此,xcopy不会质疑它是文件还是目录。

svn.excludelist是一个文本文件,包含要按行分隔的副本忽略的模式。

例如:

.svn
.svn\
\.svn\
.obj
.o
.lib
\src\

等等......