【发布时间】:2021-05-26 18:23:09
【问题描述】:
我有以下问题。我有两个目录,分别称为 dir1 和 dir2。它们都填充有文件和子目录。它们都在同一个文件系统上。 dir1 的内容是旧的,必须用 dir2 的内容替换。 dir1 的内容可以丢弃。但是,我需要这种替换以原子方式发生。我目前的解决方案如下。
mv dir1 dir1_backup; mv dir2 dir1; rm -rf dir1_backup
如果第一个命令失败,第二个命令将不会运行。这很好。但是,如果第二个命令失败怎么办? dir1 不再存在,我处于无效状态。
实现这一目标的最佳方法是什么?有可能吗?
【问题讨论】:
-
可能为时已晚 - 进行原子目录交换的简单方法是通过符号链接。
-
你不是说
&&而不是;来分隔你的cmd吗?不幸的是,虽然&&应该可以工作,但我不确定我是否愿意像那样“打赌商店”。我会构建一些进行验证的东西,尤其是在最后的rm步骤之前。祝你好运。 -
我见过 - stackoverflow.com/questions/307437/… - 以前。其中提出的解决方案失败了我的边缘案例。
-
想解释一下为什么使用符号链接和
mv -T point_to_dir2 point_to_dir1在你的边缘情况下不起作用。
标签: unix directory move atomic swap