我发现自己将相当大量的数据(20+ GB)从一个目录树移动到另一个目录树。通常它们位于同一个文件系统上,但有时它们位于不同的文件系统上。我这样做cp
只是为了保留原始数据以防万一。复制完成后,我会在验证数据已正确复制后删除原始数据。有时mv
,如果我懒得事后清理原始数据,我就会这样做。但是,我想知道,从纯粹的技术角度来看,哪种操作更有效率?为什么?
答案1
从技术上讲,mv
当源和目标位于不同的文件系统上时,它不是原子的,它实际上是cp
+ unlink()
。因此,首先mv
将复制该文件,然后调用unlink()
从目录的条目列表中删除该文件。
所以在这种情况下,AFAIU是否您cp
然后rm
(unlink()
)或mv
直接使用完全是您个人的喜好。
而mv
在同一文件系统中使用 -ing 时,您应该mv
在同一文件系统中将其用作原子(调用rename()
),以便减少开销。
感谢 @muru 和 @psusi 指出 FS 依赖行为。