必须用PowerShell清理Navicat临时文件,因forfiles无法处理只读、隐藏文件及含空格/中文路径;应通过连接属性“文件位置”定位同级Temp目录,用Get-ChildItem -File -ErrorAction SilentlyContinue | Where-Object {$_.LastAccessTime -lt (Get-Date).AddHours(-2)} | Remove-Item -Force精准清理。

Windows 下清理 Navicat 临时文件必须用 PowerShell,别碰 forfiles
forfiles 只按「最后修改时间」删文件,但 Navicat 生成的 temp_*.sql 和 *.nb3 文件常被设为只读或隐藏,forfiles 会跳过它们,还无法处理带空格或中文路径。PowerShell 的 Get-ChildItem + Remove-Item -Force 才能真正覆盖所有情况。
关键操作要点:
- 先确认真实缓存路径:右键 Navicat 连接 → 编辑连接 → 高级页签 → 查看「文件位置」字段,取其父目录下的
Temp子目录(不是硬套%APPDATA%\PremiumSoft\Navicat\Temp\) - 脚本中必须加
-File参数,否则可能误删Temp\MySQL\这类子目录 - 用
LastAccessTime比LastWriteTime更合理——临时文件几秒内就该释放,建议设为AddHours(-2),不是AddDays(-1) - 加
-ErrorAction SilentlyContinue,防止某个文件正被 Navicat 占用导致整个清理中断
macOS 清理 Cache 目录要绕开 com.prect.NavicatPremium 这个拼写陷阱
Navicat 在 macOS 上的缓存路径是 ~/Library/Caches/com.prect.NavicatPremium(注意是 prect,不是 premiumsoft),很多教程抄错路径,直接进 com.premiumsoft.navicat 是空的。这个路径在系统日志、崩溃报告、偏好设置里都存在变体,漏掉一个就清不干净。
实操建议:
- 先运行
ls ~/Library/Caches/ | grep -i navicat确认实际目录名,再动手删 -
~/Library/Caches/com.prect.NavicatPremium和~/Library/Caches/com.navicat.NavicatPremium可能同时存在,都要清 - 不要用 Finder 图形界面删 —— 它默认隐藏以
.开头的缓存文件,必须用终端rm -rf - 删完重启 Navicat,检查是否重建了空目录,否则说明有进程还在写入
Linux 上 /tmp/navicat_* 不能直接 find /tmp -name "navicat*" -delete
这样写等于把整个 /tmp 当靶子扫,极可能误删其他程序正在用的 navicat_mysql.sock 或共享内存文件。Navicat 在 Linux 启动时可能把临时文件写到 /tmp/navicat_随机串,也可能写进 ~/.navicat/Cache/,得分开处理。
安全做法:
- 优先清理用户级缓存:
find ~/.navicat/Cache/ -maxdepth 1 -type f -mtime +0 -delete(-maxdepth 1防止递归进MySQL/子目录) - 清理
/tmp/navicat_*前先lsof +D /tmp | grep navicat,确认没进程在用才删 - 如果 Navicat 是以 systemd --user 方式启动的,还要查
systemctl --user status navicat,避免删掉它正在映射的 tmpfs 文件 -
mtime +0表示“今天之前修改的”,比mtime +1更准——临时文件生命周期通常就几分钟
所有系统都得防着 Navicat 把临时文件藏进「文件位置」指定目录的同级 Temp 子目录
Navicat 连接属性里「文件位置」填的是备份/导出根目录(比如 D:\Work\DB),但它会悄悄在该路径**同级**建 Temp 目录存 temp_*.sql,而不是用系统默认缓存路径。这个行为不写文档,全靠实测发现,90% 的残留都出在这儿。
排查与清理要点:
- 打开 Navicat → 右键任意连接 → 编辑连接 → 高级 → 「文件位置」字段值记下来,比如是
/home/alice/navicat_backups - 立刻去它的父目录下找
Temp(不是子目录!是同级):ls /home/alice/ | grep Temp - 如果存在
Temp,且里面全是temp_*.sql,就是它 —— 这个目录不会随卸载消失,也不会被常规缓存清理脚本覆盖 - Linux/macOS 下建议用
find /path/to/parent -maxdepth 1 -name "Temp" -type d -exec rm -rf {} \;,Windows 用 PowerShell 的Get-ChildItem -Directory -Name "Temp"定位后删
清理这事最麻烦的不是命令写不对,而是 Navicat 会在你删完五分钟内,因某个后台任务失败又悄悄写回一批 temp_*.sql。建议清完立刻关掉 Navicat,再检查一遍目标目录是否真为空——否则等于白干。











