当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《命令行以递归方式删除匹配的文件和目录》经验,为你挑选了5个好方法。

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

(可悲的只有DOS)



1> JMD..:

既然你正在寻找一个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,所以任何其他客户端也可以这样做.

2> Antti Huima..:

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

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

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

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

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

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


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

3> 小智..:

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



4> dreeves..:

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

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

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

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

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



5> greyfade..:

在*nix或Cygwin上:

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

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有