194

在 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 命令?

4

12 回答 12

219

如果目标目录为空,使用find,只过滤目录,按名称过滤,执行rmdir:

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

如果要递归删除其内容,请替换-exec rmdir {} \;-delete-prune -exec rm -rf {} \;。其他答案包括有关这些版本的详细信息,也应归功于它们。

于 2012-10-23T14:29:25.433 回答
207

使用 find for name "a" 并执行 rm 删除那些根据您的意愿命名的,如下:

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

首先使用 ls 进行测试以列出:

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

为确保这只删除目录而不是普通文件,请使用“-type d”参数(如评论中所建议):

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

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

于 2012-10-23T14:28:31.400 回答
79

这也有效 - 它将删除所有名为“a”的文件夹及其内容:

rm -rf `find . -type d -name a`
于 2014-10-16T16:54:58.307 回答
50

我最终在这里希望删除我的node_modules文件夹,然后再使用rsync. 一个关键要求是node_modules文件夹可以嵌套,因此您需要该-prune选项。

首先,我运行它以直观地验证要删除的文件夹:

find . -type d -name node_modules -prune

然后我运行它来删除它们:

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

感谢开心果

于 2018-10-03T16:08:19.383 回答
36

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

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

其他答案缺少一个重要的东西:-prune选项。如果没有-prune,GNU find 将删除具有匹配名称的目录,然后尝试递归到它以查找更多匹配的目录。该-prune选项告诉它不要递归到符合条件的目录。

于 2016-12-03T08:01:43.143 回答
19

这个命令对我有用。它递归地完成它的工作

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

. - 当前文件夹

“node_modules” - 文件夹名称

于 2019-10-30T17:32:56.320 回答
14
find ./ -name "FOLDERNAME" | xargs rm -Rf

应该做的伎俩。警告,如果您不小心将一个./注入到xargs rm -Rf您的整个计算机中,将被删除而无法取回它,需要重新安装操作系统。

于 2012-10-23T14:35:13.157 回答
14

结合多个答案,这是一个适用于 Linux 和 MacOS 的命令

rm -rf $(find . -type d -name __pycache__)
于 2019-08-20T15:40:55.553 回答
12

我有 100 多个文件,例如

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

以上答案对我不起作用

但以下命令帮助了我。

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

我给了它-type.所以它会删除以开头的文件和文件夹log-

rm -rf递归删除文件夹,即使它有文件。

如果你只想要文件夹

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

单独的文件

find -type f -name "log-*" -exec rm  -rf {} \;
于 2016-06-09T13:30:20.550 回答
7

另一个:

"-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)
于 2017-05-12T12:03:56.510 回答
0

早期的评论对我不起作用,因为我在结构中的某个文件夹中的文件夹名称中寻找一个表达式

以下适用于结构如下的文件夹:

b/d/ab/cd/file 或 c/d/e/f/a/f/file

使用 rm-rf 前检查

find . -name *a* -type d -exec realpath {} \;

递归删除包含内容的文件夹

find . -name *a* -type d -exec rm  -rf {} \;
于 2022-03-01T03:41:31.070 回答
-2

查找路径/到/该/文件夹 -maxdepth 1 -name "my_*" -type d -delete

于 2017-11-06T12:25:33.643 回答