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

时间:2015-05-21 08:24:34

标签: bash

我的层次结构:

root
|__ project1
|   |__ node_modules
|   package.json
|__ project2
|   |__ node_modules
|   package.json

这可以非常简单,但是如何使用bash从node_modules文件夹中仅删除root个文件夹?

P.S。:node_modules文件夹不为空。

3 个答案:

答案 0 :(得分:4)

使用find

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_modules/结尾的所有路径。

在交互式bash shell中,默认情况下会启用此功能,但在脚本中,您需要执行shopt -s globstar才能使其正常工作。同样,将rm -r更改为echo会向您显示最先发生的事情。

答案 1 :(得分:1)

你可以:

find root -name node_modules | xargs rm -rf

如果您不想删除名为node_modules的文件,则应添加-type d以确保node_modules为目录。

答案 2 :(得分:1)

这是一种方法:

$ find root -name node_modules -type d | while read dir; do rm -r "$dir"; done

这也适用于包含空格的文件名。

(我总是倾向于忘记-exec的{​​{1}}选项的确切语法,这就是为什么我喜欢管道find。我也认为它更符合"做一件事并且做得好#34;哲学。)