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
选项的确切语法,以查找
,这就是为什么我更喜欢在时使用管道。我还认为它更符合“做一件事,把它做好”的理念。)