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