我有多个npm项目保存在本地目录。现在我想在没有node_modules文件夹的情况下备份我的项目,因为它占用了很多空间,也可以在任何时候使用npm install进行检索。

那么,使用命令行接口从指定路径递归删除所有node_modules文件夹的解决方案是什么呢?


当前回答

从多个项目中删除node_modules文件夹。只需将它放在包含多个项目的项目文件夹中并运行它。

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)
    

其他回答

我想到了这个解决方案,

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

使用实例递归删除文件夹

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

如果你想移动而不是删除它:

find . -name 'node_modules' -type d -prune -exec mkdir -p ./another/dir/{} \; -exec mv -i {} ./NODE_MODULES/{} \;

这将保持目录结构。

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

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

删除当前工作目录下的目录:

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

或者你也可以使用trash (brew install trash)进行分阶段删除:

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

一个简单的技巧来删除你服务器中的所有node_modules文件夹(这可以减少很多空间)是运行:

# For Ubuntu
sudo find / -not -path "/usr/lib/*" -name 'node_modules' -type d -prune -exec rm -rf '{}' +

# For macOS
sudo find / -not -path "/usr/local/*" -name 'node_modules' -type d -prune -exec rm -rf '{}' +

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

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

npx npkill

它将找到所有的node_module,并允许您有选择地删除它们。