如果mv被中断会发生什么情况?

如果mv被中断会发生什么情况?

如果 Linuxmv命令被中断,会发生什么情况?比如,我正在将整个目录移动到其他地方,并在移动过程中中断它。源目录仍然会保持不变吗?

答案1

如果你移动目录在同一个文件系统上,您只是将目录条目从文件系统中的一个位置移动到另一个位置。例如,将删除中mv /source/dir /target/dir的目录条目并在 中创建一个新目录条目。这是通过一个原子系统调用(即不可中断)完成的。包含 目录条目的 inode以及目录本身的实际内容不受影响。dir/source/targetdir

如果你移动目录从一个文件系统到另一个文件系统,所有文件首先复制到新文件系统,然后从原始文件系统中断开链接。因此,如果您mv在复制过程中中断,您可能会得到一些文件的两个副本 - 一个在旧位置,一个在新位置。

答案2

GNU 实现迭代命令行上的参数,首先尝试重命名,如果失败,则递归复制,然后递归删除源。因此

mv a b c/

将删除A复制之前b,并且不会开始删除任何内容A目标复制完成之前。

请注意,这仅适用于 GNU 实现。

澄清:如果A是包含以下目录d, 和b是一个文件,顺序将是

  • 创建 c/a
  • 复制 a/d -> c/a/d
  • 复制 a/e -> c/a/e
  • 删除 a/d
  • 删除 a/e
  • 删除
  • 复制 b -> c/b
  • 删除

答案3

您移动一个目录,中断移动,原始目录将保持不变:

$ mv a b/

如果您移动多个目录,则每个目录在源或目标上都将保持完整,具体取决于您中断的时间:

$ mv a b c/

我如何得到答案:

$ mv --version
mv (GNU coreutils) 8.21

$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals.  If the copy fails, then the part
that was copied to the destination partition is removed.  If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.

作为测试,我将一个大文件夹复制到 NFS 目录,然后中断,源大文件夹中的文件数量保持不变,部分内容留在 NFS 目录中。我使用“find . -type f | wc -l”进行验证。

看来西蒙的答案是正确的。

答案4

如果您因为想断开与终端的连接而想要中断 mv,您可以将其发送到后台:

* press Ctrl+Z

# bg
# disown

相关内容