2012-10-23 51 views
54

在Linux中,如何删除文件夹层次结构中嵌套的特定名称的文件夹?如何删除特定名称的文件夹

下面的路径在一个文件夹下,我想删除名为a的所有文件夹。

1/2/3/a 
1/2/3/b 
10/20/30/a 
10/20/30/b 
100/200/300/a 
100/200/300/b 

我应该从父文件夹使用哪些Linux命令?

回答

67

如果目标目录是空的,使用发现,只有目录,过滤器过滤器按名称,执行命令rmdir:

find -type d -name a -exec rmdir {} \; 

如果你想递归地删除它的内容,通过-delete-prune -exec rm -rf {} \;更换-exec rmdir {} \;。其他答案包括有关这些版本的详细信息,也可以相信。

79

使用查找名为“a”和执行rm以删除按照你的意愿的命名,具体如下:首先使用LS

find . -name a -exec rm -rf {} \; 

测试列出:

find . -name a -exec ls {} \; 

为了确保这只会删除目录而不是纯文件,请使用“-type d”参数(如注释中所示):

find . -name a -type d -exec rm -rf {} \; 

“{}”是对每个找到的文件“a”的替换 - 通过替换对每个文件执行exec命令。

+2

你可能想增加一个 “型d”在那里只需要一个文件匹配相同的名称。 –

+1

另外请注意,这将会产生类似'1/2/a/3/4'的情况,这可能不是有意的,所以建议先+1测试... – twalberg

+2

reco'echo {}'先测试它,而不是'ls {}' – charneykaye

10
find ./ -name "FOLDERNAME" | xargs rm -Rf 

应该这样做。警告,如果您不小心将./泵入xargs rm -Rf,您的整个计算机将被删除,但没有选项将其取消,需要重新安装操作系统。

+0

这一个适合我,thx! – DarkteK

+0

哦,只是那个小小的风险。这就是全部?哈哈。非常感谢您的警告。我肯定会犯这种打字错误。 – TinkerTenorSoftwareGuy

21

这也适用 - 它会删除所有名为“a”和其内容的文件夹:

rm -rf `find -type d -name a` 
+4

这是唯一实际工作的人。 – Buffalo

+0

@Buffalo,怎么样?这个defo的作品,但其他人也是如此。会惊讶地发现一个env在哪里工作,但其他人没有给出所有的答案基本上是'find/rm'。 – wmorrison365

+2

@ wmorrison365因为如果你做'找。 -name a -exec rm -rf {} \;',当它试图进入那个目录来寻找更多的项目时会发现崩溃,给你一个错误,比如'find:'1/2/3/a':No such文件或目录“。 –

6

我有超过100个文件,如

log-12 
log-123 
log-34 
.... 

以上的答案对我来说没有工作

但下面的命令帮助了我。

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

我给-type.所以它删除与log-

rm -rf开始删除文件夹递归即使它有文件文件和文件夹。

find -type d -name foo -a -prune -exec rm -rf {} \; 

其他的答案是缺少一个重要的:如果你想单独的文件夹单独

find -type d -name "log-*" -exec rm -rf {} \; 

文件

find -type f -name "log-*" -exec rm -rf {} \; 
6

要删除名为foo的所有目录,运行

事情:-prune选项。如果没有-prune,GNU find将删除名称匹配的目录,然后尝试缓存到目录中以查找更多匹配的目录。 -prune选项告诉它不递归到符合条件的目录中。

1

还有一句:

"-exec rm -rf {} \;" can be replaced by "-delete" 

find -type d -name __pycache__ -delete  # GNU find 
find . -type d -name __pycache__ -delete # POSIX find (e.g. Mac OS X) 
0

查找路径/到/的/文件夹-maxdepth 1个-name “MY_ *” 型Ð-delete

相关问题