Bash 如何在不删除现有文件的情况下覆盖文件?

Bash 如何在不删除现有文件的情况下覆盖文件?,bash,Bash,我有一个运行的node_exporter web服务器,它提供目录中的文件。这些文件在特定时间点具有主机度量。我有一个运行的守护进程,它每15秒从其他导出程序中获取一次度量数据,并将其写入此目录。当它写入文件时,我认为它会删除现有文件并写入新文件。因此,有时,对于一个瞬间的节点,导出器不提供导出器提供的任何度量。如何确保以前的度量存在,直到写入新的度量并且没有空的/重复的度量 写入同一目录中的临时文件 完成后,将临时文件重命名为结果文件 mv tempfile outputfile 添加了描

我有一个运行的node_exporter web服务器,它提供目录中的文件。这些文件在特定时间点具有主机度量。我有一个运行的守护进程,它每15秒从其他导出程序中获取一次度量数据,并将其写入此目录。当它写入文件时,我认为它会删除现有文件并写入新文件。因此,有时,对于一个瞬间的节点,导出器不提供导出器提供的任何度量。如何确保以前的度量存在,直到写入新的度量并且没有空的/重复的度量

  • 写入同一目录中的临时文件
  • 完成后,将临时文件重命名为结果文件

    mv tempfile outputfile
    

  • 添加了描述如何从节点和本机bash进行原子更新的副本,因为问题不包括明确的显式代码?在您为bash添加的副本中,我看不到解决方案。只说它在单个文件系统中的非原子重命名是原子的。我相信这已经包含在dups中了——我会检查一下,如果没有的话,添加更多。啊——node.js duplicate包含了创建和重命名模式,而bash没有。添加了另一个覆盖该区域的bash副本。为了与机制对话--
    foo
    在命令
    foo
    启动之前,用
    O_TRUNC
    打开文件
    bar
    ,这样它就可以将
    foo
    的stdout(FD 1)连接到该文件。问题被标记为“bash”。如果从节点重命名,则节点应具有相同的目录和文件访问权限。如果节点也是Web服务器,这可能会有点不安全。所以move命令是原子的,但重定向不是?是的,看起来像原子的。谢谢重定向不是原子的。mv“大部分”是原子的,请参阅stackoverflow上关于原子性mv的讨论