2015-04-23 75 views
6

我使用fs模块创建符号链接。如果path/to/symlink已经存在,则在回调中发送错误。如何通过覆盖现有的符号链接强制创建符号链接?

如何强制符号链接创建并覆盖现有的符号链接?

check error + delete existing symlink + try again之外是否还有其他替代方案?

+0

可能有模块会提供这样的功能,但最后它还会使用您描述的方法(即“检查存在+删除,如果存在+符号链接”)。 – robertklep

+0

我不知道如何在js中做到这一点,但在Linux中可以重写符号链接,因此可以从节点调用shell脚本。来源:http://serverfault.com/questions/389997/how-to-override-update-a-symlink – vanadium23

+0

@robertklep嗯,当然。我也可以创建一个模块,只是为了这件事,但如果有本地方式,我会感兴趣。 –

回答

5

当使用ln命令行工具,我们可以做到这一点使用-f(力)标志

ln -sf target symlink-name 

然而,使用fs API,除非我们实现一个模块中此功能,这是不可能的。

我创建了lnf - 用于覆盖现有符号链接的模块。

// Dependencies 
var Lnf = require("lnf"); 

// Create the symlink 
Lnf.sync("foo", __dirname + "/baz"); 

// Override it 
Lnf("bar", __dirname + "/baz", function (err) { 
    console.log(err || "Overriden the baz symlink."); 
}); 

Read the full documentation on the GitHub repository

2

您可以创建不同的(唯一的)名临时符号连接,然后将其重命名。

使用fs.symlinkSync(path, tempName)然后fs.rename(tempName, name)

当其他应用程序依赖于其存在(并且可能在删除时尚未重新创建时可能意外访问它)时,删除文件可能会更好。