如何通过覆盖现有符号链接来强制创建符号链接?
How to force a symlink creation by overriding the existing symlink?
我使用 fs
模块创建符号链接。
fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
如果 path/to/symlink
已经存在,将在回调中发送错误。
如何强制创建符号链接并覆盖现有的符号链接?
除了check error + delete existing symlink + try again
还有其他选择吗?
当使用 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.");
});
您可以创建具有不同(唯一)名称的临时符号链接,然后重命名它。
使用fs.symlinkSync(path, tempName)
然后fs.rename(tempName, name)
。
当其他应用程序依赖于它的存在时(并且可能在删除但尚未重新创建时意外访问它)时,这可能比删除文件更好。
你可以用 fs 轻松做到这一点。之前调用fs.remove(target)
就可以了。如果没有文件 - 它将 return 代码 0
await fs.remove("path/to/symlink");
await fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
我使用 fs
模块创建符号链接。
fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
如果 path/to/symlink
已经存在,将在回调中发送错误。
如何强制创建符号链接并覆盖现有的符号链接?
除了check error + delete existing symlink + try again
还有其他选择吗?
当使用 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.");
});
您可以创建具有不同(唯一)名称的临时符号链接,然后重命名它。
使用fs.symlinkSync(path, tempName)
然后fs.rename(tempName, name)
。
当其他应用程序依赖于它的存在时(并且可能在删除但尚未重新创建时意外访问它)时,这可能比删除文件更好。
你可以用 fs 轻松做到这一点。之前调用fs.remove(target)
就可以了。如果没有文件 - 它将 return 代码 0
await fs.remove("path/to/symlink");
await fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});