为什么复制比移动慢?

Why is copy slower than move?

我有一个大文件要移动。实验室中的正常协议是将其复制到某处,然后将其删除。

我决定改成mv

我的问题是,为什么 mv 比 cp 快这么多?

为了测试它,我生成了一个 2.7 GB 大小的文件。

time cp test.txt copy.txt

实际耗时 0m20.113s

time mv test.txt copy.txt

实际耗时 0m12.403s。

TL;DR mv 几乎是 copy 的两倍。有什么解释吗?这是预期的结果吗?

编辑-

我决定 move/copy 将文件夹移动到当前文件夹以外的目标位置。

time cp test.txt ../copy.txt 

time mv test.txt ../copy.txt

这次cp用了9.238s,mv只用了0.297s。所以不是某些答案所暗示的。

更新

答案是正确的。当我尝试将文件 mv 复制到同一系统上的不同磁盘时,mvcp 花费的时间几乎相同。

当您 mv 同一文件系统上的文件时,系统只需更改目录条目即可反映您的重命名。甚至没有读取文件中的数据。

(相同的文件系统意味着:相同的目录或相同的目录 tree/same 驱动器,当然前提是源目录和目标目录不遍历通向另一个文件系统的符号链接!)

当你跨文件系统 mv 一个文件时,它与 cp + rm 的效果相同:没有速度增益(除了你只 运行 一个命令,并且一致性得到保证:你不不必检查 cp 是否成功执行 rm)

(旧版本的 mv 拒绝跨文件系统移动目录,因为它们只做了重命名)

小心,这不是等价的。 cp 默认覆盖目的地,而 mv 将无法将 file/dir 重命名为现有的 file/dir.