【问题标题】:Using rm -rf with a directory使用 rm -rf 与目录
【发布时间】:2016-08-13 11:52:48
【问题描述】:

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

  • rm -rf dir/*
  • rm -rf dir/
  • rm -rf dir

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

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

【问题讨论】:

  • 请咨询您的系统管理员或发送邮件至Super User。 Stack Overflow 是一个面向专业和爱好者程序员的问答网站。
  • @Cyrus “询问您的系统管理员”。不确定我是否同意这个建议。同样,当人们问编程问题时,我们可以说“问高级开发人员”
  • 允许,但指向 SuperUser 的指针不太容易引起争议;这不是关于编写软件的过程或特定于该目的的工具的问题。 (unix.stackexchange.com 也可以作为主题论坛)。
  • 只是好奇,shell 脚本相关的问题被认为是专业的编程问题吗?所以,如果我提到我在我正在处理的 shell 脚本中添加命令来执行 rm -rf 并且需要帮助来理解上述命令之间的区别 - 它是否有资格成为一个有效的 SO 问题?跨度>
  • @adbdkb,主要是关于脚本的问题肯定是这里的主题,是的。相比之下,对于脚本没有特别适用性的一般用法问题(除了这些命令可能在脚本中使用的事实之外)在其他地方更适用。只是提到您的预期用途是一个脚本并没有什么不同,但是如果您询问rm 的使用模式在一般交互式使用中不会出现(例如,您想删除所有在一个 NUL 分隔的流),它会是局部的。

标签: bash directory rm


【解决方案1】:
  • rm -rf dir/*

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

  • rm -rf dir/

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

  • rm -rf dir

    在你的情况下,与上述相同。

一般情况下,rm 等工具在解析路径名时通常遵循IEEE/OpenGroup standards,这意味着dir/ 等价于dir/.。这意味着如果dir是指向目录的符号链接rm -rf dir/将删除目录的内容(包括隐藏文件),但不会删除链接或目录本身,而rm -rf dir只会删除符号链接.

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

【讨论】:

  • 因此,考虑到执行操作的权限有效,我的问题或上面的响应中的第二个和第三个命令 - rm -rf dir/@ 987654339@ 也会同时删除目录吗?
  • @adbdkb 是的,应该是这样。
猜你喜欢
  • 2011-02-28
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2012-10-05
  • 2019-11-22
  • 2015-01-09
  • 2019-03-08
相关资源
最近更新 更多