Bash 如何按名称模式分层删除文件夹?

Bash 如何按名称模式分层删除文件夹?,bash,Bash,我拥有的层次结构: root |__ project1 | |__ node_modules | package.json |__ project2 | |__ node_modules | package.json 这可能非常简单,但是如何使用bash从root文件夹中仅删除node\u模块文件夹 注意:节点\u模块文件夹不为空。使用查找: find root -name node_modules -type d -exec rm -r {} + 这将匹配root中的所有目

我拥有的层次结构:

root
|__ project1
|   |__ node_modules
|   package.json
|__ project2
|   |__ node_modules
|   package.json
这可能非常简单,但是如何使用bash从
root
文件夹中仅删除
node\u模块
文件夹

注意:
节点\u模块
文件夹不为空。

使用
查找

find root -name node_modules -type d -exec rm -r {} +
这将匹配
root
中的所有目录,并将它们添加到
rm-r
的参数列表中

我建议将
rm-r{}
更改为
echo{}
(或者完全删除
-exec
部分),以确保它首先做正确的事情

如果您的shell支持它,您也可以像这样使用
globstar

rm -r root/**/node_modules/
glob递归地匹配以
/node\u modules/
结尾的任何路径

在交互式bashshell中,这在默认情况下是启用的,但在脚本中,您需要执行
shopt-sglobstar
,才能使其正常工作。同样,将
rm-r
更改为
echo
会显示首先要发生的事情。

使用
查找

find root -name node_modules -type d -exec rm -r {} +
这将匹配
root
中的所有目录,并将它们添加到
rm-r
的参数列表中

我建议将
rm-r{}
更改为
echo{}
(或者完全删除
-exec
部分),以确保它首先做正确的事情

如果您的shell支持它,您也可以像这样使用
globstar

rm -r root/**/node_modules/
glob递归地匹配以
/node\u modules/
结尾的任何路径

在交互式bashshell中,这在默认情况下是启用的,但在脚本中,您需要执行
shopt-sglobstar
,才能使其正常工作。同样,将
rm-r
更改为
echo
将向您显示首先要发生的事情。

您可以:

find root -name node_modules | xargs rm -rf
如果您不想删除名为
node\u modules
的文件,则应添加
-键入d
,以确保
node\u modules
是目录。

您可以:

find root -name node_modules | xargs rm -rf

如果不想删除名为
node\u modules
的文件,则应添加
-键入d
,以确保
node\u modules
是目录。

以下是一种方法:

$ find root -name node_modules -type d | while read dir; do rm -r "$dir"; done
这也适用于包含空格的文件名


(我总是倾向于忘记
-exec
选项的确切语法来
查找
,这就是为什么我更喜欢在
时管道连接到
。我还认为这更符合“做一件事,把它做好”的理念。)

这里有一种方法:

$ find root -name node_modules -type d | while read dir; do rm -r "$dir"; done
这也适用于包含空格的文件名

(我总是倾向于忘记
-exec
选项的确切语法,以
查找
,这就是为什么我更喜欢在
时使用管道。我还认为它更符合“做一件事,把它做好”的理念。)