在Windows上从R创建软符号链接

时间:2015-03-03 18:09:05

标签: r symlink

我想在Windows上使用R内的文件(Mklink)创建一个符号链接。它失败了,因为我不能告诉R"以管理员的身份运行它"。我有什么方法可以做到这一点吗?

我确实设法创建了硬符号文件链接,但是:

path_src <- file.path(tempdir(), "test.txt")
write("Hello World!", file = path_src)
path_tgt <- file.path(tempdir(), "test_symlink.txt")
shell(sprintf("mklink /H %s %s", 
  normalizePath(path_tgt, mustWork = FALSE),
  normalizePath(path_src)
))

请注意path_tgt处的文件如何反映对path_src所做的更改:

write("HELLO WORLD!", file = path_src, append = TRUE)

然而,这失败了:

path_tgt_2 <- file.path(tempdir(), "test_symlink_2.txt")
> shell(sprintf("mklink /D %s %s", 
  normalizePath(path_tgt_2, mustWork = FALSE),
  normalizePath(path_src)
))
Ihre Berechtigungen reichen nicht aus, um diesen Vorgang auszufhren.
Warning messages:
1: running command 'C:\Windows\system32\cmd.exe /c mklink /D C:\Users\Thyson\AppData\Local\Temp\Rtmpum73ZU\test_symlink_2.txt C:\Users\Thyson\AppData\Local\Temp\Rtmpum73ZU\test.txt' had status 1 
2: In shell(sprintf("mklink /D %s %s", normalizePath(path_tgt_2, mustWork = FALSE),  :
  'mklink /D C:\Users\Thyson\AppData\Local\Temp\Rtmpum73ZU\test_symlink_2.txt C:\Users\Thyson\AppData\Local\Temp\Rtmpum73ZU\test.txt' Ausführung mit Fehlerkode 1 fehlgeschlagen

注意

由于德语版的Windows,我似乎无法用英语获取错误。第一行转换为&#34; 您没有足够的授权来执行此过程&#34;

2 个答案:

答案 0 :(得分:2)

以管理员身份运行R.然后,当您从R中运行“Mklink”时,您就是管理员。

实际上,您还可以使用R函数file.symlink创建符号链接。

答案 1 :(得分:1)

2016 (Windows 10 Insiders build 14972) 起,如果您启用开发者模式(在设置>更新和安全>面向开发者),您还可以在没有管理员权限的情况下创建符号链接。

这在带有 mklink 的 Windows 控制台中有效,但 R 的 file.symlink() 似乎不起作用(从 R 4.0.3 开始),可能是因为需要 dwFlags待定。

为了从 R 调用它,我需要在路径包含空格时添加 "

shell(sprintf('mklink "%s" "%s"', 
              normalizePath(link, mustWork = FALSE),
              normalizePath(original)
))

对于目录,您还可以考虑使用 Sys.junction(),这在某种程度上相当于符号链接。