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

Sum*_*mit 59 macos bash command-line-interface node-modules

我有多个npm项目保存在本地目录中.现在我想在没有node_modules文件夹的情况下备份我的项目,因为它占用了大量空间,并且可以随时使用来检索npm install.

因此,我需要一个解决方案,使用命令行界面从指定路径递归删除所有node_modules文件夹.任何建议/帮助都非常值得一提.

Dar*_* M. 133

原始答案:

find . -name 'node_modules' -type d -prune
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用trash(brew install trash)进行保存删除:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
Run Code Online (Sandbox Code Playgroud)

  • `-prune`是一项重要的优化.它会发现不会递归到`node_module`目录(寻找嵌套的node_modules) (16认同)
  • `{}` 是一个占位符,`find` 将替换为它找到的文件路径。`+` 告诉 `find` 将所有文件路径附加到单个命令,而不是为每个文件运行 `rm`。 (11认同)
  • 这就像,我是认真的,第20次我在这个答案中复制这段代码...... xD (8认同)
  • ''{}'+`是什么意思? (4认同)
  • 对于一个项目,我在很多“内部”node_modules 文件夹中得到“/node_modules/gulp-server-livereload/node_modules:目录不为空”。如何解决这个问题? (3认同)
  • `找到。-name 'node_modules' -type d -prune -exec du -chs {} + | grep t` 了解要删除的总大小 (3认同)
  • 在任何复制和粘贴命令行中看到“rm -rf”让我不寒而栗。如果脚本没有找到任何内容,或者 find 没有安装在您的 unix 版本中,并且您从硬盘驱动器的根目录执行,则它可能会删除您的整个硬盘驱动器。不太可能,但是,嘿,值得一提。 (2认同)

jec*_*kep 56

试试 https://github.com/voidcosmos/npkill

npx npkill
Run Code Online (Sandbox Code Playgroud)

它将找到所有 node_modules 并让您删除它们。

杀戮

  • 比上面更好的选择,因为我通常有 2-3 个项目,我想保持 node_modules 完整 (13认同)
  • 我更喜欢删除所有文件夹并根据需要重新安装它们。谁有时间手动挑选? (12认同)
  • @fregante 我。我没有时间等待 10 多个包含前言和后记的 package.json 完成。这比考虑 20 秒并选择 10 秒要花更长的时间。 (2认同)

Sid*_*rth 14

改进已接受的答案,

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
Run Code Online (Sandbox Code Playgroud)

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

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

逐个删除文件夹

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;
Run Code Online (Sandbox Code Playgroud)

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

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;
Run Code Online (Sandbox Code Playgroud)

  • 对已接受的答案@Sidharth 进行了很好的改进,非常感谢 (3认同)

nos*_*tio 14

在 Windows 上,我使用以下文件从当前文件夹中递归.BAT删除:node_modules

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 
Run Code Online (Sandbox Code Playgroud)

或者,通过CMD.EXE

>cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo "%d" && rd "%d" /s /q)""
Run Code Online (Sandbox Code Playgroud)

  • 最新版本:https://gist.github.com/noseratio/6961e9c4d54741e01ca705e7ff1d0c80 (2认同)

Sum*_*mit 8

我遇到过这个解决方案,

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

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

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


Sim*_*ran 8

在 Bash 中,您可以简单地使用

rm -rf node_modules **/node_modules
Run Code Online (Sandbox Code Playgroud)


Iva*_* V. 7

bash函数来删除node_modules. 它将node_modules从当前工作目录中递归地删除所有目录,同时打印找到的路径。

你只需要放入你的某个地方$PATH

rmnodemodules(){

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

}
Run Code Online (Sandbox Code Playgroud)