为什么 $ find -delete 有时不起作用?

为什么 $ find -delete 有时不起作用?

我认为我正在谈论的是手册页的这一部分,即只是勉强对我来说太难以理解了:

   -删除
      ...它不会尝试删除文件名中带有“/”字符的文件名
      出于安全原因,路径名相对于“。”...

具体来说,我想做的是$ find . -name '.svn' -type d -delete。我意识到我可以改用-exec,但find似乎对于其他名称也没有问题,包括目录深处(/其路径名中显然包含许多字符)。

也许它忽略了点文件并且文档是错误的?

答案1

“安全原因”是指在find枚举文件和删除文件之间,攻击者可能会修改文件路径的一个组件,使其成为指向意外目录的符号链接,从而导致您从意外目录中删除同名文件。例如,如果攻击者可以将其更改为指向的符号链接,则您最终可能会删除/etc/passwd而不是。/tmp/foo/passwdfoo/etc

第 9.1.5 节(“-exec 的更安全版本”)GNU 查找文档更详细地讨论了这个问题。

相关内容