原子文件保存在Linux上而不会丢失元数据

Bre*_*don 8 linux macos perl file atomic

我正在研究基于Perl的文件同步工具.它将文件下载到临时目录(保证与真实文件位于同一文件系统上),然后将临时文件移动到旧文件系统上,保留权限,所有权和ACL等元数据.我想知道如何在Linux上实现最后一步.

在Mac OS X上,至少在C中,我会使用该exchangedata功能.这需要两个文件名作为参数并交换其内容,使所有元数据(除了mtime)保持不变.它保证操作是原子的 - 所有读者都会看到旧文件或新文件,从不介于两者之间.不幸的是,我不认为它可以在Linux上使用.

我知道它rename会以原子方式移动,但它不会保留元数据.另一方面,我可以打开文件并使用新文件的内容覆盖数据,这将保留所有元数据,但不会是原子操作.有关解决这个问题的任何建议吗?

jro*_*way 6

我在这里看到的唯一方法是从您要替换的文件中读取元数据,将其应用于临时文件,然后在旧文件上重命名临时文件.(rename显然保留了源文件属性.)

  • 这听起来像一个很好的开始列表."善的敌人是伟大的." (2认同)