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

Ror*_*ory 29 svn recursion command-line file dos

如何递归删除与特定模式匹配的所有文件和目录?例如,删除所有".svn"目录及其包含的文件?

(可悲的只有DOS)

JMD*_*JMD 56

既然你正在寻找一个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'肯定更容易/更快.)

  • "实际上,显然TortoiseSVN还提供了导出没有.svn/_svn目录的工作目录的选项." 我相信这是svn本身(`svn export`)的一个特性,不仅仅是TortoiseSVN,所以任何其他客户端也可以这样做. (5认同)

Ant*_*ima 18

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

find . -name '.svn' -type d | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

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

如果你想尝试一下,试试吧

find . -name '.svn' -type d | xargs echo
Run Code Online (Sandbox Code Playgroud)

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

  • 低估错误使用`rm` +`xargs` +`find`.在这样的情况下,你应该**总是**使用`-print0`和`NUL`终止,否则它只是一场等待发生的灾难. (2认同)

小智 7

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


dre*_*ves 6

像这样的东西可能会成功,但当然要小心!

find . -name ".svn" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

首先尝试这样的事情来做一个干运行:

find . -name ".*" -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)

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


gre*_*ade 5

在*nix或Cygwin上:

find -name .svn -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)