事情的起因总是如此悲伤——
• Ran $workspace = (Resolve-Path '.').Path; $target = (Resolve-Path '.\.cache').Path; if (-not $target.StartsWith($workspace, [System.StringComparison]::OrdinalIgnoreCase)) { throw "Refusing to delete path outside workspace:
│ $target" }; & takeown /f $target /r /d y; & icacls $target /grant Administrators:(OI)(CI)F /t /c; & cmd /c "rd /s /q \"$target\""; Write-Output "exists=$(Test-Path -LiteralPath $target)"; Get-ChildItem -Force
└ ERROR: The current logged on user does not have ownership privileges on
the file (or folder) "C:\York\Works\Study\llm-exp\Embedding-Task\Step-2\.cache".
… +5013 lines
\PROGRA~1\dotnet\packs\MICROS~2.REF\100~1.0\ref\net10.0\Microsoft.Extensions.Primitives.xml - Access is denied.
\PROGRA~1\dotnet\packs\MICROS~2.REF\100~1.0\ref\net10.0\Microsoft.Extensions.Validation.dll - Access is denied.
我在让CodeX帮我把uv缓存移到全局的时候,CodeX顺手问了我一下要不要把当前WorkSpace的UV缓存清一下,然后就把我几百G的C盘文件顺手删掉了。至于咋发现的?我TM项目是Python,它删到nuget了,我又不是瞎子。
当然,你要说我蠢,其实我没那么蠢(但是还是很蠢)。
我没开自动批准,在CodeX要求执行命令的时候,我还特地看了一下,嗯,确实是我的WorkSpace,最坏的结果也就是整个论文的目录被扬了,无所谓的,可以复现,都不值钱,。
结果:最后给我C盘删了,三角洲干没了,Steam干没了,游戏全删了,输入法也删了(删了一半,用不了也卸载不了),现在我还在用tm的微软输入法。
好在重要数据还没被删,问题不大。
中途和GPT5.4讨论了挺久,大概搞明白了为啥被删了,鉴于站内无法直接发AI内容,我就简单概括一下。
- 文件树不是封闭的,修改和删除并不是到目录顶就结束了
举个例子,我使用C:\York\Works这个路径执行删除命令,佬友觉得最坏的结果是什么?是不是直接干掉整个Works文件夹?No!理论上可以干掉整个硬盘!在操作系统里面,有个东西叫链接,通俗来讲,就是我在加链接的情况下,如果使用了递归删除,理论上我可以删到任何地方,这个就是相对路径的威力了。
事已至此,今晚肯定是没三角洲玩了,哭也没地方哭了,但是我觉得我这种情况并不是特例,所以我特地让AI写了一份安全删除守则。鉴于站内不给发AI内容,所以我粘贴到只读的剪贴板里面,大家可以仿照一下或者自取,总的来说还是不建议大家开自动批准,吃一堑长一智,要是重要数据被干没了就寄了。
