我有两个目录条目,a和b。 之前,a和b指向不同的inode。 之后,我希望b指向同一个inode。 我希望这是安全的 - 我的意思是,如果我在某处失败,b要么指向它的原始inode,要么指向inode。最重要的是我不想以b消失为止。
mv在覆盖时是原子的。
当目的地已经存在时,似乎不起作用。
所以看起来我可以说:
一个tmp mv tmp b
如果失败,将会留下一个'tmp'文件,这是不可取的,但不是灾难。
有更好的方法吗?
(我实际上要做的是用包含该内容的单个inode替换具有相同内容的文件,在所有目录条目之间共享)
答案 0 :(得分:1)
ln a tmp ; mv tmp b
事实上,正如你在问题中所说的那样,是以原子方式进行的最快方式。
(Nitpickers转角:更快将两个系统调用放在一个程序中)
答案 1 :(得分:0)
ln a tmp && mv tmp b || rm tmp
似乎更好,因为如果ln
失败,mv
将无法执行(并在失败时将stderr混乱)。