alwaysconfused27938 Asked: 2022-10-24 05:23:16 +0800 CST2022-10-24 05:23:16 +0800 CST 2022-10-24 05:23:16 +0800 CST 为什么'mv'不需要'-r'来处理目录,但'rm'和'cp'需要呢? 772 我正在学习基本的 Linux 命令。这似乎违反直觉:为什么 copy ( cp ) 和 remove ( rm ) 需要递归选项 ( -R, --recursive) 来与目录交互,而 move ( mv ) 已经不需要这样做了? linux command-line 3 个回答 Voted Anon 2022-10-24T18:24:04+08:002022-10-24T18:24:04+08:00 从目录的基本角度来看: rm必须递归到目录并为每个文件和目录调用unlinkandrmdir cp必须递归到目录中读取,然后将每个文件和目录重写到新位置 mv只需要打一个电话rename 由于没有mv为目录实现递归操作,因此它没有-r选项。 与关注损坏或花费的时间rm或cp实际原因的其他答案不同,它只是这些命令实现的泄漏抽象。 Best Answer Robert Longson 2022-10-24T06:02:58+08:002022-10-24T06:02:58+08:00 rm(删除又名删除):破坏信息,因此如果您在目录上运行它,而您打算在文件上运行它,那么您可能会造成很大的损害。 cp(复制):再一次,你的意思是复制一个文件吗?如果我们复制一个目录,它可能有数千个文件。这可能不是您想要的,并且填满您的磁盘是不好的。 mv(move aka rename): 只是重命名一个目录,它的内容总是保持不变,所以我们不能在这里做任何递归。我们肯定不会想要将目录及其所有子目录重命名为相同的名称。 John Dallman 2022-10-26T05:48:12+08:002022-10-26T05:48:12+08:00 稍微了解一下文件系统如何工作的信息就更有意义了。 目录实际上是一种文件。它的内容是该目录中文件的名称,以及有关在磁盘上何处找到它们的信息。该信息以磁盘而不是目录的形式存储。 当您mv创建一个目录时,您只是在移动目录本身。这些文件完全保留在原来的位置,并且没有对它们进行任何处理。因此,无需递归到目录中。其中的文件自然而自动地随着它“移动”。 是的,如果你在磁盘之间移动东西,它会更复杂。这些命令主要是为简单的情况设计的,并且在幕后有额外的机制来处理复杂的情况。
从目录的基本角度来看:
rm
必须递归到目录并为每个文件和目录调用unlink
andrmdir
cp
必须递归到目录中读取,然后将每个文件和目录重写到新位置mv
只需要打一个电话rename
由于没有
mv
为目录实现递归操作,因此它没有-r
选项。与关注损坏或花费的时间
rm
或cp
实际原因的其他答案不同,它只是这些命令实现的泄漏抽象。rm
(删除又名删除):破坏信息,因此如果您在目录上运行它,而您打算在文件上运行它,那么您可能会造成很大的损害。cp
(复制):再一次,你的意思是复制一个文件吗?如果我们复制一个目录,它可能有数千个文件。这可能不是您想要的,并且填满您的磁盘是不好的。mv
(move aka rename): 只是重命名一个目录,它的内容总是保持不变,所以我们不能在这里做任何递归。我们肯定不会想要将目录及其所有子目录重命名为相同的名称。稍微了解一下文件系统如何工作的信息就更有意义了。
目录实际上是一种文件。它的内容是该目录中文件的名称,以及有关在磁盘上何处找到它们的信息。该信息以磁盘而不是目录的形式存储。
当您
mv
创建一个目录时,您只是在移动目录本身。这些文件完全保留在原来的位置,并且没有对它们进行任何处理。因此,无需递归到目录中。其中的文件自然而自动地随着它“移动”。是的,如果你在磁盘之间移动东西,它会更复杂。这些命令主要是为简单的情况设计的,并且在幕后有额外的机制来处理复杂的情况。