我有以下问题。我有两个目录,我将它们称为 dir1 和 dir2。它们都填充有文件和子目录。它们都在同一个文件系统上。 dir1 的内容是旧的,必须替换为 dir2 的内容。可以丢弃 dir1 的内容。但是,我需要这种替换以原子方式发生。我目前的解决方案如下。
mv dir1 dir1_backup; mv dir2 dir1; rm -rf dir1_backup
如果第一个命令失败,第二个命令将不会运行。这很好。但是,如果第二个命令失败怎么办? dir1 不再存在,我处于无效状态。
实现这一目标的最佳方法是什么?是否可以?
最佳答案
Linux 提供了 renameat2
系统调用,它带有 RENAME_EXCHANGE
标志将交换 2 个对象:
renameat2(AT_FDCWD, "dir1", AT_FDCWD, "dir2", RENAME_EXCHANGE);
关于UNIX 自动交换或替换目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17113324/