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