为什么使用 mv 时我会得到“X”和“Y”是同一个文件,即使它们显然不是同一个文件?

为什么使用 mv 时我会得到“X”和“Y”是同一个文件,即使它们显然不是同一个文件?

我尝试使用以下命令将文件从一个目录移动到另一个目录(在 CIFS 挂载的文件系统中):

mv /mnt/development/Backup/NagiosServer/latest/* /mnt/development/Backup/NagiosServer/daily/

这会产生错误消息:

mv: '/mnt/development/Backup/NagiosServer/latest/20190512-backup.zip' and '/mnt/development/Backup/NagiosServer/daily/20190512-backup.zip' are the same file

此时.../daily/目录中的目标文件肯定不存在。

这是错误发生后的相关目录列表:

nagios@nagios-server:~$ mv /mnt/development/Backup/NagiosServer/latest/* /mnt/development/Backup/NagiosServer/daily
mv: '/mnt/development/Backup/NagiosServer/latest/20190514-backup.zip' and '/mnt/development/Backup/NagiosServer/daily/20190514-backup.zip' are the same file
nagios@nagios-server:~$ ls -lsha /mnt/development/Backup/NagiosServer/latest/
total 3.5G
   0 drwxr-xr-x 2 nagios root    0 May 15 08:00 .
   0 drwxr-xr-x 2 nagios root    0 May 13 15:15 ..
3.5G -rwxr-xr-x 1 nagios root 3.5G May 14 17:13 20190514-backup.zip
nagios@nagios-server:~$ ls -lsha /mnt/development/Backup/NagiosServer/daily
total 18G
4.0K drwxr-xr-x 2 nagios root 4.0K May 15 08:00 .
   0 drwxr-xr-x 2 nagios root    0 May 13 15:15 ..
3.5G -rwxr-xr-x 1 nagios root 3.5G May  8 17:12 20190508-backup.zip
3.5G -rwxr-xr-x 1 nagios root 3.5G May  9 17:12 20190509-backup.zip
3.5G -rwxr-xr-x 1 nagios root 3.5G May 10 17:12 20190510-backup.zip
3.5G -rwxr-xr-x 1 nagios root 3.5G May 11 17:14 20190511-backup.zip
3.5G -rwxr-xr-x 1 nagios root 3.5G May 12 17:12 20190512-backup.zip

卸载的挂载点列表没有显示任何内容:

nagios@nagios-server:~$ ls /mnt/development/
nagios@nagios-server:~$ 

我按照建议发现这里禁用 CIFS 缓存,此方法有效,但仅在第一次尝试 mv 时有效。此后,它会失败并显示相同的错误消息。

这里发生了什么?

我在 Ubuntu 18.04 下运行,挂载的 CIFS 文件系统位于远程 Windows 10 计算机上。此外,Windows 计算机正在运行 VirtualBox VM,该 VM 也运行 Ubuntu 18.04。从 VM 运行时,mv 命令可以正常工作。

答案1

它们是同一个文件,因为在移动过程中这些文件会发生冲突。如果语言文件名被用来代替。

这是在警告你,你正在将文件从源移动到目标,而该文件或文件名在目标中已经存在。这意味着你可能会丢失数据。这个现有文件将被覆盖。

您可以使用--interactive--force标志来改变这种行为,但您必须明白自己在做什么。

$ man mv
...

       -f, --force
              do not prompt before overwriting

       -i, --interactive
              prompt before overwrite

       -n, --no-clobber
              do not overwrite an existing file

       If you specify more than one of -i, -f, -n, only the final one takes effect.

首次发出命令时,一些文件会从源移动到目标,直到要移动此文件。此时,会mv出现错误并警告您有关情况。请注意,此时您尚未完成移动。您没有复制,因此原始目录中可能不存在许多源文件。

如果您知道您不想要目标中当前的数据/mnt/development/Backup/NagiosServer/daily/20190512-backup.zip,请在发出命令之前将其删除mv,或强制覆盖现有文件。

我建议您也研究rsync一下它的功能。

相关内容