代码之家  ›  专栏  ›  技术社区  ›  Ben Clifford

自动用硬链接替换另一个文件

  •  2
  • Ben Clifford  · 技术社区  · 15 年前

    我有两个目录条目,A和B。 之前,A和B指向不同的inode。 然后,我想让B指向和A相同的inode。 我希望这是安全的-我的意思是如果我在某个地方失败了,B或者指向它的原始inode或者a inode。尤其是我不想以B消失而告终。

    mv在重写时是原子的。

    当目标已经存在时,ln似乎不起作用。

    所以我可以说:

    在TMP中 中压TMP B

    如果失败,将留下一个“tmp”文件,这是不可取的,但不是灾难。

    有更好的方法吗?

    (我实际要做的是用包含该内容的单个inode替换内容相同的文件,在所有目录条目之间共享)

    2 回复  |  直到 11 年前
        1
  •  1
  •   Joshua    15 年前
     ln a tmp ; mv tmp b
    

    事实上,正如你在问题中所说,原子化是最快的方法。

    (Nitpickers角:更快地将两个系统调用放在一个程序中)

        2
  •  0
  •   mtd    11 年前

    ln a tmp && mv tmp b || rm tmp

    好像好多了 ln 失败, mv 不会被执行(当stderr失败时会混乱)。