我有一个bash脚本(Scientific Linux)。 该脚本必须对文件进行操作。我们说“file.dat”(大约1 GB) 一段时间后,脚本重新启动并执行以下操作:
if [ -f file.dat ]; then
cp file.dat file.previous.dat
fi
备份文件。 然后一个进程启动并覆盖“file.dat”
为了最安全的一面(电力关闭或任何意外)。什么是最好的选择:cp还是mv? 感谢。
答案 0 :(得分:5)
我会使用一个组合:
mv file.dat file.dat.previous
cp file.dat.previous file.dat
这样file.dat.previous
将永远完整,因为mv
是原子的。
答案 1 :(得分:4)
如果你想要一个快速的原子移动,那么 mv 是man 2 rename
所说的事情:
如果newpath已经存在,它将被原子替换(受一些条件限制;请参阅下面的错误),这样就没有其他进程尝试访问newpath就会发现它丢失了。
也许更重要的是, mv 主要是目录条目操作,因此与任何正常情况下的文件副本相比,它都非常快。
如果您担心停电或系统意外停机,那么:
mv 命令应该更快,但面对灾难性故障时的稳健性是硬件或文件系统问题。
答案 2 :(得分:1)
这里可能没有太大帮助,但rsync
是这类工作的工具。如果传输中断,它可以从需要的地方重新启动。