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

Bash 使用命令行从指定路径递归删除node_modules文件夹,bash,macos,command-line-interface,node-modules,Bash,Macos,Command Line Interface,Node Modules,我有多个npm项目保存在本地目录中。现在我想备份我的项目,而不使用node\u modules文件夹,因为它占用了大量空间,而且还可以使用npm install随时检索 因此,我需要一个解决方案,使用命令行界面从指定路径递归删除所有node_模块文件夹。 任何建议/帮助都是非常值得赞赏的。我遇到了这个解决方案 首先使用find查找文件夹,并指定文件夹的名称 递归执行delete命令-exec rm-rf'{}'+ 运行以下命令以递归方式删除文件夹 find/path-type d-name“

我有多个npm项目保存在本地目录中。现在我想备份我的项目,而不使用
node\u modules
文件夹,因为它占用了大量空间,而且还可以使用
npm install
随时检索

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

我遇到了这个解决方案

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


find/path-type d-name“node_modules”-exec rm-rf'{}+
打印出要删除的目录列表:

find . -name 'node_modules' -type d -prune
从当前工作目录中删除目录:

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

或者,您可以使用(
brew安装垃圾桶
)进行分阶段删除:

find . -name node_modules -type d -prune -exec trash {} +
这真的很有效

find . -name "node_modules" -exec rm -rf '{}' +

改进公认的答案

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
我发现该命令将运行很长时间来获取所有文件夹,然后运行delete命令,以使该命令可恢复,我建议使用
\
要查看正在运行的命令的进度,请使用
-print
查看正在删除的目录

注意:必须首先将
cd
放入根目录,然后运行命令或而不是
find。
使用
find{project\u directory}

逐个删除文件夹的步骤

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;
逐个删除文件夹并打印要删除的文件夹

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

对于喜欢交互方式的人,请参考@jeckep answer,在您希望删减的目录中运行它

npx npkill
试一试

它将找到所有节点_模块并允许您删除它们


bash
用于删除
节点模块的函数
。它将递归地从当前工作目录中删除所有
节点\u模块
目录, 打印时找到路径

您只需要在
$PATH

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

在Windows上,我使用以下
.BAT
文件从当前文件夹递归删除
节点模块

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 
或者,通过
CMD.EXE

cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)"

用于从多个项目中删除node_modules文件夹的Python脚本。只需将它放在包含多个项目的项目文件夹中,然后运行它

import os
import shutil
dirname = '/root/Desktop/proj' #Your Full Path of Projects Folder
dirfiles = os.listdir(dirname)

fullpaths = map(lambda name: os.path.join(dirname, name), dirfiles)

dirs = []

for file in fullpaths:
    if os.path.isdir(file): dirs.append(file)

for i in dirs:
    dirfiles1 = os.listdir(i)
    fullpaths1 = map(lambda name: os.path.join(i, name), dirfiles1)
    dirs1 = []
    for file in fullpaths1:
        if os.path.isdir(file):
            dirs1.append(file)
            if(file[-12:]=='node_modules'):
                shutil.rmtree(file)
                print(file)
    
操作系统:Ubuntu

删除服务器中所有
node\u模块的一个简单技巧是运行:

sudo find/-not-path”/usr/lib/*“-name'node_modules'-type d-prune-exec rm-rf'{}'+

这里我们需要排除
/usr/lib/*
,因为如果您不这样做,它将删除您的
npm
,您需要重新安装:)

-prune
是一个重要的优化。对于一个项目,如果不递归到
节点模块
目录(查找嵌套的节点模块),我会在许多“内部”节点模块文件夹中得到
/node\u模块/gulp服务器livereload/node\u模块:目录不为空
。如何解决这个问题?这就像,我是认真的,第20次我在这个答案上复制这个代码。。。XD
'{}'+
的含义是什么?
{}
是一个占位符,
find
将其替换为找到的文件路径
+
告诉
find
将所有文件路径附加到一个命令,而不是为每个命令运行
rm
。对已接受的答案@Sidharth进行了很好的改进,非常值得赞赏的是@Sidharth这是以前答案的重复,只是没有解释。从基本的linux程序,甚至可能是windows,一行就可以完成一些事情,这似乎有点过分了
import os
import shutil
dirname = '/root/Desktop/proj' #Your Full Path of Projects Folder
dirfiles = os.listdir(dirname)

fullpaths = map(lambda name: os.path.join(dirname, name), dirfiles)

dirs = []

for file in fullpaths:
    if os.path.isdir(file): dirs.append(file)

for i in dirs:
    dirfiles1 = os.listdir(i)
    fullpaths1 = map(lambda name: os.path.join(i, name), dirfiles1)
    dirs1 = []
    for file in fullpaths1:
        if os.path.isdir(file):
            dirs1.append(file)
            if(file[-12:]=='node_modules'):
                shutil.rmtree(file)
                print(file)