如何递归删除所有文件&与某种模式匹配的目录?例如删除所有“.svn”目录及其包含的文件?
(可悲的是DOS)
答案 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\
等等......