以原子方式生成和复制文件的好策略是什么

mat*_*asg 8 linux files

我有一个myfile必须定期重新生成的文件。重新生成需要几秒钟。另一方面,我必须定期读取生成的最后一个(或倒数第二个)文件。保证我正在阅读一个完整生成的文件并且一旦我开始阅读它,我将能够完全阅读它的最佳方法是什么?

一种可能的解决方案是

  1. myfile实际上是指向最后生成的文件的软链接,例如myfile.last.
  2. 重新生成是在一个新文件上完成的,比如说 myfile.new
  3. 再生后,myfile.new移到myfile.last

我看到的问题(我不知道答案)是:如果myfile在 mv 发生时另一个脚本正在复制,是否cp正确完成?

另一种可能的解决方案是生成名称上带有时间戳的文件,例如myfile-2014-09-03_12:34myfile它再次是指向上次创建的文件的软链接。创建后应更改此链接以指向新文件。再次:类似的可能性有多大

cp myfile anotherfile

复制损坏的文件?

Bar*_*mar 6

如果您在同一个文件系统中移动,mv则是原子的——它只是重命名,而不是复制内容。因此,如果您这一代人的最后一步是:

mv myfile.new myfile.last
Run Code Online (Sandbox Code Playgroud)

读取过程将始终看到文件的旧版本或新版本,永远不会看到任何不完整的内容。