rm:拒绝删除“.” 或“..”目录:跳过“..”

vad*_*uha 1 rm error-handling

为什么当我尝试..从目录中删除时我收到错误:

rm: refusing to remove '.' or '..' directory: skipping '..'
Run Code Online (Sandbox Code Playgroud)

在你问我为什么要这样做之前:只是因为。

Sté*_*las 5

这是加入的大多数实施保障措施rm要解决一些炮弹(包括POSIX壳)的不良特性,其中rm -rf .*将递归地删除的内容...以及(这是固定的福塞斯外壳和衍生品(如pdksh程序),zsh并且fish至少) .

您可以使用( 没有该错误功能的外壳)的rm内置zsh函数。

zmodload zsh/files # to load and enable the builtin version of rm
                   # and a few other utilities
rm -rf ..
Run Code Online (Sandbox Code Playgroud)

或者,使用 GNUfind或兼容版本,您可以执行以下操作:

find .. -delete
Run Code Online (Sandbox Code Playgroud)

需要明确的是,那些删除父目录(包括当前工作目录)的内容(递归)。

如果您想..从当前目录中取消链接条目,通常在现代系统上,您不能。只要包含它们的目录存在且无法删除...并且始终存在。在某些文件系统上,它们甚至是虚拟的(不是目录文件中的物理条目)。

即使您设法删除了它们(例如通过debugfs手动编辑目录的内容),它们也会在下一次文件系统检查 ( fsck) 完成时重新创建,某些应用程序(如cdPOSIX shell的内置程序)甚至会忽略它们完全(无论cd ..当前目录$PWD中是否有..文件,都会从当前工作目录的尾部删除一个路径组件,无论当前目录中是否有文件),并且 POSIX 需要..在路径名参数中提供给系统调用以表示父目录,无论是否当前(或对应于类似路径的dir/../whatever)目录中存在以该名称命名的实际目录条目。