duanhu7400 2016-02-21 20:25
浏览 75
已采纳

通过os包创建相对符号链接

I would like to create a relative symbolic link in go using the os package.

os already contains the function: os.SymLink(oldname, newname string), but it cannot create relative symlinks.

For example, if I run the following:

package main 

import (
    "io/ioutil"
    "os"
    "path/filepath"
)

func main() {
    path := "/tmp/rolfl/symexample"
    target := filepath.Join(path, "symtarget.txt")
    os.MkdirAll(path, 0755)
    ioutil.WriteFile(target, []byte("Hello
"), 0644)
    symlink := filepath.Join(path, "symlink")
    os.Symlink(target, symlink)
}

it creates the following in my filesystem:

$ ls -la /tmp/rolfl/symexample
total 12
drwxr-xr-x 2 rolf rolf 4096 Feb 21 15:21 .
drwxr-xr-x 3 rolf rolf 4096 Feb 21 15:21 ..
lrwxrwxrwx 1 rolf rolf   35 Feb 21 15:21 symlink -> /tmp/rolfl/symexample/symtarget.txt
-rw-r--r-- 1 rolf rolf    6 Feb 21 15:21 symtarget.txt

How can I use golang to create the relative symlink that looks like:

$ ln -s symtarget.txt symrelative
$ ls -la
total 12
drwxr-xr-x 2 rolf rolf 4096 Feb 21 15:23 .
drwxr-xr-x 3 rolf rolf 4096 Feb 21 15:21 ..
lrwxrwxrwx 1 rolf rolf   35 Feb 21 15:21 symlink -> /tmp/rolfl/symexample/symtarget.txt
lrwxrwxrwx 1 rolf rolf   13 Feb 21 15:23 symrelative -> symtarget.txt
-rw-r--r-- 1 rolf rolf    6 Feb 21 15:21 symtarget.txt

I want something that's like the symrelative above.

Do I have to resort to os/exec:

cmd := exec.Command("ln", "-s", "symtarget.txt", "symlink")
cmd.Dir = "/tmp/rolfl/symexample"
cmd.CombinedOutput()
  • 写回答

1条回答 默认 最新

  • duanchi0897 2016-02-21 20:50
    关注

    Don't include the absolute path to symtarget.txt when calling os.Symlink; only use it when writing to the file:

    package main 
    
    import (
        "io/ioutil"
        "os"
        "path/filepath"
    )
    
    func main() {
        path := "/tmp/rolfl/symexample"
        target := "symtarget.txt"
        os.MkdirAll(path, 0755)
        ioutil.WriteFile(filepath.Join(path, "symtarget.txt"), []byte("Hello
    "), 0644)
        symlink := filepath.Join(path, "symlink")
        os.Symlink(target, symlink)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法