使用命令行从指定路径递归删除node_modules文件夹


92

我有多个npm项目保存在本地目录中。现在,我要备份不带node_modules文件夹的项目,因为它占用了大量空间,并且可以随时使用进行检索npm install

因此,我需要一种使用命令行界面从指定路径递归删除所有node_modules文件夹的解决方案。任何建议/帮助都是高度赞赏的。

Answers:


224

打印出要删除的目录列表:

find . -name 'node_modules' -type d -prune

从当前工作目录中删除目录:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

另外,您可以使用垃圾桶brew install trash)进行阶段删除:

find . -name node_modules -type d -prune -exec trash {} +

26
-prune是一项重要的优化。它将发现不会递归到node_module目录中(以查找嵌套的node_modules)
rzymek

1
对于一个项目,我进入/node_modules/gulp-server-livereload/node_modules: Directory not empty了很多“内部” node_modules文件夹。如何解决这个问题?
josemigallas

15
我是认真的,这就像我是在第20次使用此答案来复制此代码时一样……xD
Cipi,

6
是什么意思'{}' +
Rokit

3
{}是一个占位符,它将find替换为找到的文件路径。+告诉find将所有文件路径附加到单个命令,而不是rm为每个命令运行。
塔林

24

改善已接受的答案,

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

我发现该命令将运行很长时间来获取所有文件夹,然后运行delete命令,以使该命令可恢复,我建议使用\;该命令,并查看正在运行的命令的进度,-print以查看要删除的目录。

注意:您必须首先cd进入根目录,然后运行命令或代替find .usefind {project_directory}

一对一删除文件夹

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

逐个删除文件夹并打印要删除的文件夹

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

编辑:

对于喜欢以交互方式执行此操作的人员,请参阅@jeckep答案,在您希望修剪的目录中运行此命令。

npx npkill

非常感谢接受@Sidharth回答的改进,非常感谢
nclarx


10

我遇到过这种解决方案,

  • 首先使用查找文件夹,find并指定文件夹名称。
  • 递归执行删除命令 -exec rm -rf '{}' +

运行以下命令以递归方式删除文件夹

find /path -type d -name "node_modules" -exec rm -rf '{}' +


1

bash功能删除node_modulesnode_modules在打印找到的路径时,它将从当前工作目录中递归删除所有目录。

您只需要在您的某处放置 $PATH

rmnodemodules(){

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

}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.