codex误删H盘事故复盘

H盘被Codex删完了... 开发调优 想让codex清理掉它生成的测试文件,删了几次不成功就请求提权实现,没怎么看就同意了,结果整个H盘被删干净了… 导致H盘被全部删完的原因是: Codex 清理测试临时目录 tests_runtime 的过程中。由于 Remove-Item 遇到 ACL 权限异...
codex误删H盘事故复盘
codex误删H盘事故复盘
H盘被Codex删完了... 开发调优
想让codex清理掉它生成的测试文件,删了几次不成功就请求提权实现,没怎么看就同意了,结果整个H盘被删干净了… 导致H盘被全部删完的原因是: Codex 清理测试临时目录 tests_runtime 的过程中。由于 Remove-Item 遇到 ACL 权限异常,Codex 切换为 cmd.exe /c "rmdir /s /q ..." 执行递归删除;但该命令在 PowerShell 中错误…

Agent 回复

我先清理工作区内明确属于测试/临时缓存的目录:`tests_runtime`、`.pytest-tmp`、`.uv-cache`、`pytest-cache-files-*`,再顺手删掉项目源码侧的 `__pycache__`。

执行命令

$targets = @(
  'H:\WorkSpace\legado-cli\legado_cli\tests_runtime',
  'H:\WorkSpace\legado-cli\legado_cli\.pytest-tmp',
  'H:\WorkSpace\legado-cli\legado_cli\.uv-cache',
  'H:\WorkSpace\legado-cli\legado_cli\pytest-cache-files-5rsmpepv',
  'H:\WorkSpace\legado-cli\legado_cli\pytest-cache-files-ehirpbmw'
);
foreach ($target in $targets) {
  if (Test-Path -LiteralPath $target) {
    Remove-Item -LiteralPath $target -Recurse -Force -ErrorAction Stop;
  }
}

遇到的错误

Exit code: 1
Wall time: 0.7 seconds
Output:
Remove-Item : 对路径“H:\WorkSpace\legado-cli\legado_cli\tests_runtime\case-mc4ko0pr”的访问被拒绝。
所在位置 行:11 字符: 5
+     Remove-Item -LiteralPath $target -Recurse -Force -ErrorAction Sto ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (H:\WorkSpace\le...i\tests_runtime:String) [Remove-Item], Unauthorized
   AccessException
    + FullyQualifiedErrorId : RemoveItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.RemoveItemCommand

因 ACL 阻塞,agent 切换到 cmd.exe + rmdir

Agent 回复

`Remove-Item` 会递归下钻到那些 ACL 异常的子目录里,所以卡住了。我改用 Windows 原生的目录删除接口,直接删顶层目标目录。

执行命令

cmd.exe /c "rmdir /s /q \"H:\WorkSpace\legado-cli\legado_cli\tests_runtime\""

命令结果

Wall time: 14.7 seconds
aborted by user

直接原因是错误执行了高破坏性的递归删除命令:

cmd.exe /c "rmdir /s /q \"H:\WorkSpace\legado-cli\legado_cli\tests_runtime\""

这条命令本意是删除 tests_runtime,但写法混用了 cmd.exe 和 PowerShell 的引号规则。

  • 在 PowerShell 中,\" 不是正确的引号转义方式。
  • 因此该命令字符串被传给 cmd.exe 时,目标路径可能被解析成带有孤立反斜杠的形式。
  • 当当前工作盘为 H: 时,前置孤立 \ 会指向 H:\ 根目录。
  • 这使得命令不再是“安全删除某个子目录”,而变成了“存在将当前盘根目录纳入删除目标的风险命令”。

2 个帖子 - 2 位参与者

阅读完整话题

来源: linux.do查看原文