对目录使用 rm -rf

Using rm -rf with a directory

我尝试搜索 SO,但无法找到以下命令之间的区别。如果我有一个名为 dir 的目录,下面的命令有何不同?

另外,如果 id 运行 命令不是所有者或者甚至不在所有者组中,目录的用户权限如何影响结果?

我在我正在处理的 shell 脚本中添加执行 rm -rf 的命令,需要帮助以理解上述命令之间的区别。

  • rm -rf dir/*

    删除目录中的文件(不删除目录本身)。 注意hidden files不会被删除。

  • rm -rf dir/

    尾部斜杠表示 dir 是一个目录。如果它是一个文件,它就不会被删除。在您的情况下,这与 rm -rf dir 相同,但通常不同(见下文)

  • rm -rf dir

    您的情况与上述情况相同。

一般来说,像rm这样的工具在解析路径名时通常会跟在IEEE/OpenGroup standards之后,也就是说dir/等同于dir/.。其中的一个含义是,如果 dir 是目录的符号 link,rm -rf dir/ 将删除目录的内容(包括隐藏文件),但不会删除 link 或目录本身,而 rm -rf dir 只会删除 symlink.

您需要对要删除的文件或目录具有 write 权限,并且对 rm 需要遍历以删除文件的目录具有 exec 权限。您可以阅读有关 Unix 文件系统权限的更多信息 here