我的层次结构:
root
|__ project1
| |__ node_modules
| package.json
|__ project2
| |__ node_modules
| package.json
这可以非常简单,但是如何使用bash从node_modules
文件夹中仅删除root
个文件夹?
P.S。:node_modules
文件夹不为空。
答案 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;哲学。)