MacOS 一键清理指定目录下老旧node_modules

逻辑流程

双击执行脚本文件,自动触发以下操作:

打开系统终端窗口,进入当前项目目录路径

扫描项目目录下所有node_modules文件夹,过滤出满足以下条件的目录:最后修改时间超过90天且未被任何项目文件引用

将符合条件的node_modules目录列表显示给用户,要求手动确认删除操作

用户确认后,执行批量删除操作,同时输出已删除的目录日志

一键生成 .command 文件(复制粘贴即可)

在终端运行以下命令,自动生成桌面图标:

bash 复制代码
cat > ~/Desktop/清理NodeModules.command << 'EOF'
#!/bin/bash

SEARCH_ROOT="/Users/mac/Desktop/开发空间"
DAYS_OLD=90
TEMP_FILE="/tmp/clean_nm_$$"

log() {
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}

if [[ ! -d "$SEARCH_ROOT" ]]; then
  log "❌ 错误:项目目录不存在 → $SEARCH_ROOT"
  read -p "按回车退出..."
  exit 1
fi

log "🔍 开始扫描目录:$SEARCH_ROOT"
log "⏳ 查找超过 ${DAYS_OLD} 天未修改项目的 node_modules..."

> "$TEMP_FILE"
find "$SEARCH_ROOT" -type d -name "node_modules" 2>/dev/null | while read -r nm_path; do
  [[ -z "$nm_path" ]] && continue
  project_dir=$(dirname "$nm_path")
  [[ -f "$project_dir/package.json" ]] || continue
  last_mod=$(stat -f %m "$project_dir" 2>/dev/null) || continue
  now=$(date +%s)
  diff_days=$(( (now - last_mod) / 86400 ))
  [[ $diff_days -gt $DAYS_OLD ]] && echo "$nm_path|$diff_days" >> "$TEMP_FILE"
done

to_delete=()
while IFS= read -r line; do
  [[ -n "$line" ]] && to_delete+=("$line")
done < "$TEMP_FILE"
rm -f "$TEMP_FILE"

if [[ ${#to_delete[@]} -eq 0 ]]; then
  log "✅ 未发现需要清理的 node_modules"
  read -p "按回车退出..."
  exit 0
fi

log "⚠️  发现 ${#to_delete[@]} 个可清理的 node_modules:"
echo "----------------------------------------"
for item in "${to_delete[@]}"; do
  nm_path="${item%|*}"
  days="${item#*|}"
  printf "🗑️  (%3s 天未改) %s\n" "$days" "$nm_path"
done
echo "----------------------------------------"

read -p "❓ 确认删除以上 ${#to_delete[@]} 个 node_modules 吗?(输入 yes 确认): " -r user_input

if [[ "$user_input" == "yes" ]]; then
  log "🚀 开始删除..."
  for item in "${to_delete[@]}"; do
    nm_path="${item%|*}"
    if [[ -d "$nm_path" ]]; then
      rm -rf "$nm_path"
      log "✅ 已删除: $nm_path"
    fi
  done
  log "🎉 清理完成!"
else
  log "🛑 操作已取消。"
fi

read -p "按回车关闭窗口..."
EOF

chmod +x ~/Desktop/清理NodeModules.command
echo "✅ 已在桌面生成「清理NodeModules.command」,双击即可运行!"

运行完后,桌面上就会出现一个可双击的脚本,双击就会自动弹出命令行执行!

相关推荐
猫头虎7 小时前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
皮卡车厘子1 天前
Mac 挂载目录
macos
良逍Ai出海2 天前
在 Windows & macOS 上安装 Claude Code,并使用第三方 Key 的完整教程
windows·macos
热爱生活的五柒2 天前
linux/mac/wsl如何使用claude code,并配置免费的硅基流动API?(官方的需要付费订阅)
linux·运维·macos
胖胖大王叫我来巡山2 天前
mac本地安装DataEase桌面版
macos
奋斗者1号2 天前
OpenClaw 部署方式对比:云端、WSL、Mac 本机、Ubuntu 虚拟机(2026年2月最新主流实践)
linux·ubuntu·macos
玉梅小洋2 天前
Android SDK 安装指南(MacOS 和 Windows)
android·windows·macos·sdk
2501_916007472 天前
没有 Mac 用户如何上架 App Store,IPA生成、证书与描述文件管理、跨平台上传
android·macos·ios·小程序·uni-app·iphone·webview
胖胖大王叫我来巡山2 天前
Mac通过源码安装部署SQLBOT
macos
June bug2 天前
【领域知识】广告全链路测试
macos·objective-c·cocoa