Linux的mv如何在内部工作?

hac*_*tsu 7 linux filesystems command-line

我知道在Linux中,如果我们想要一个文件夹从命名f_oldf_new,我们可以运行:

mv f_old f_new
Run Code Online (Sandbox Code Playgroud)

但这个命令实际上让我很困惑.系统是否复制了所有内容f_old,将其粘贴到新文件夹f_newf_old最后删除?或者它只是重命名f_oldf_new

jmf*_*205 11

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

编辑 -

请注意,它是被操纵的目录条目.这与inode不同.


hek*_*mgl 6

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

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


zze*_*nnn 5

完整手册中对此进行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'
Run Code Online (Sandbox Code Playgroud)

这也可以在这里在线获得:https : //www.gnu.org/s/coreutils/mv

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