Linux的mv如何在内部工作?

时间:2015-03-11 21:47:42

标签: linux command-line filesystems

我知道在Linux中,如果我们要将文件夹从f_old重命名为f_new,我们可以运行:

mv f_old f_new

但是这个命令实际上让我很困惑。系统是否会复制f_old中的所有内容,将其粘贴到新文件夹f_new并最后删除f_old?或者只是将f_old重命名为f_new

3 个答案:

答案 0 :(得分:9)

如果源和目标位于同一分区上,则不会复制或移动任何内容。各种inode组件都被操纵,就是这样。如果源和目标不同,那么您将看到物理副本和删除。

编辑 -

请注意,操作的是目录条目。这与inode不同。

答案 1 :(得分:6)

只要目标位置与源相同的分区(文件系统),就不会移动或触摸任何数据。只有目录条目中的名称才会更改。

如果目标位于单独的分区上,则数据将首先复制到目标,然后从源中删除。

答案 2 :(得分:4)

完整手册中对此进行了介绍,man mv解释了如何获取:

   The  full  documentation  for mv is maintained as a Texinfo manual.  If
   the info and mv programs are properly installed at your site, the  comâ
   mand

          info coreutils 'mv invocation'

此处也可在线获取:https://www.gnu.org/s/coreutils/mv

  

mv可以将任何类型的文件从一个文件系统移动到另一个文件系统。之前   fileutils的4.0版本,mv只能在它们之间移动常规文件   文件系统。例如,现在mv可以移动整个目录   层次结构包括从一个分区到的特殊设备文件   另一个。它首先使用cp -a使用的一些相同代码   复制请求的目录和文件,然后(假设副本   它取消了原件。如果复制失败,那么部分   已删除复制到目标分区的内容。如果你是   将三个目录从一个分区复制到另一个分区和副本   第一个目录成功,但第二个目录没有成功,第一个目录   将留在目标分区和第二个和第三个   将保留在原始分区上。