如何递归删除与特定模式匹配的所有文件和目录?例如,删除所有".svn"目录及其包含的文件?
(可悲的只有DOS)
既然你正在寻找一个DOS解决方案,那么上周的帖子几乎完全相同,而且共识是:
命令行工具在Windows中以递归方式删除具有指定名称的文件夹?
for/d/r.(.svn)中的%d执行@if存在"%d"rd/s/q"%d"
要么
for/f"usebackq"%d in("dir .svn/ad/b/s")do rd/s/q"%d"
实际上,SVN还为您提供了导出没有.svn/_svn目录的工作目录的选项.
三年后的事后:我认为人们最终需要以递归方式删除.svn/_svn文件夹的原因是因为他们直接将本地工作副本复制到新位置,以便对其修改后的版本进行文件夹比较干净的出口,即在修改后的本地工作副本出现问题之后.(至少这就是我需要它的原因.在可能的情况下使用'svn export'肯定更容易/更快.)
这是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文件和任何其他文件.
像这样的东西可能会成功,但当然要小心!
find . -name ".svn" -exec rm -rf {} \;
首先尝试这样的事情来做一个干运行:
find . -name ".*" -exec echo {} \;
请注意,空括号将填入文件名,转义分号将结束执行的命令(从"-exec"开始).
在*nix或Cygwin上:
find -name .svn -print0 | xargs -0 rm -rf