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


当前回答

在使用rsync对正在进行的工作进行备份之前,我在这里试图删除node_modules文件夹。一个关键要求是node_modules文件夹可以嵌套,因此需要使用-prune选项。

首先,我运行这个来直观地验证要删除的文件夹:

find . -type d -name node_modules -prune

然后我运行这个程序将它们全部删除:

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

多亏了开心果

其他回答

删除所有名为foo的目录,执行命令:

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

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

结合多个答案,下面是一个在Linux和MacOS上都可以使用的命令

rm -rf $(find . -type d -name __pycache__)

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

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

如果你想递归删除它的内容,替换-exec rmdir {} \;使用-delete或-prune -exec rm -rf {} \;其他答案包括关于这些版本的细节,也要给它们署名。

在使用rsync对正在进行的工作进行备份之前,我在这里试图删除node_modules文件夹。一个关键要求是node_modules文件夹可以嵌套,因此需要使用-prune选项。

首先,我运行这个来直观地验证要删除的文件夹:

find . -type d -name node_modules -prune

然后我运行这个程序将它们全部删除:

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

多亏了开心果

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

rm -rf `find . -type d -name a`