为什么 'mv' 不需要 '-r' 来处理目录,但 'rm' 和 'cp' 却需要?

为什么 'mv' 不需要 '-r' 来处理目录,但 'rm' 和 'cp' 却需要?

我正在学习基本的 Linux 命令。这似乎违反直觉:为什么复制 (cp)并删除(R M)需要递归选项(-R--recursive)与目录交互,当移动(动量) 已经可以这样做而不需要吗?

答案1

  • rm(移除又名删除):破坏信息,因此如果您原本想在文件上运行它,却在目录上运行它,那么可能会造成很大的损害。
  • cp(复制):再说一遍,您是想复制文件吗?如果我们复制一个目录,其中可能包含数千个文件。这可能不是您想要的,而且填满您的磁盘是不好的。
  • mv(移动又名重命名):只是重命名目录,其内容始终保持不变,因此我们无法在此处执行任何递归操作。我们肯定不会想将目录及其所有子目录重命名为同一个名称。

答案2

从目录的基本角度来看:

  • rm必须递归到目录并unlinkrmdir每个文件和目录调用
  • cp必须递归到目录中读取每个文件和目录,然后将其重写到新位置
  • mv只需调用一次即可rename

由于目录没有可实施的递归操作,因此mv它没有-r选项。

与关注损害或所花费时间rmcp实际原因的其他答案不同,它只是这些命令实现的一个泄漏的抽象。

答案3

通过了解文件系统的工作原理,这会变得更有意义。

目录实际上是一种文件。其内容是该目录中文件的名称,以及有关在磁盘上查找这些文件的位置的信息。这些信息是以磁盘而不是目录的形式存储的。

当你mv进入目录时,你只是在移动目录本身。文件会保持原样,不会对它们进行任何操作。因此,无需递归进入目录。目录中的文件会自然而然地自动随之“移动”。

是的,如果你在磁盘之间移动东西,情况会更复杂。这些命令主要是为简单情况而设计的,后台有额外的机制来处理复杂情况。

相关内容