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

我有多个npm项目保存在本地目录。现在我想在没有< a href = " https://stackoverflow.com/questions/63294260/what-is-the-purpose-of-the-node-modules-folder " > node_modules < / >文件夹的情况下备份我的项目,因为它占用了大量的空间,也可以在任何时候使用npm install检索。

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

78242 次浏览

我想到了这个解决方案,

  • 首先使用find找到文件夹并指定文件夹名称。
  • 执行删除命令-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 install trash)进行分阶段删除:

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

改进已被接受的答案:

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

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

注意:必须先将cd放入根目录,然后执行该命令。或者使用find {project_directory}代替find .

逐个删除文件夹。

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

逐个删除文件夹,并打印删除的文件夹。

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

对于喜欢交互式方式的人,请参考jeckep的回答。在你想要修剪的目录下运行:

npx npkill
< p >试 https://github.com/voidcosmos/npkill < / p >
npx npkill

它会找到所有node_modules,并让你有选择地删除它们。

npkill

bash函数删除node_modules。它将递归地从当前工作目录中删除所有node_modules目录,

你只需要在你的$PATH中的某个地方

rmnodemodules(){


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


}

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

@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文件夹。只需将它放在包含多个项目的项目文件夹中并运行它。

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)
    

删除服务器中所有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,你需要重新安装它:)

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

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

这将保持目录结构。

在Bash中,可以简单地使用

rm -rf node_modules **/node_modules