为什么当我尝试..从目录中删除时我收到错误:
rm: refusing to remove '.' or '..' directory: skipping '..'
Run Code Online (Sandbox Code Playgroud)
在你问我为什么要这样做之前:只是因为。
这是加入的大多数实施保障措施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)目录中存在以该名称命名的实际目录条目。