2016-02-21 11 views
8

Tôi muốn tạo liên kết tượng trưng tương đối khi sử dụng gói os.Tạo liên kết tượng trưng tương đối thông qua gói os

os đã contains the function: os.SymLink(oldname, newname string), nhưng không thể tạo liên kết tượng trưng tương đối.

Ví dụ, nếu tôi chạy như sau:

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\n"), 0644) 
    symlink := filepath.Join(path, "symlink") 
    os.Symlink(target, symlink) 
} 

nó tạo ra sau trong hệ thống tập tin của tôi:

$ 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 

Làm thế nào tôi có thể sử dụng golang để tạo ra các liên kết tượng trưng tương đối giống như:

$ 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 

Tôi muốn một cái gì đó giống như số symrelative ở trên.

Tôi có phải dùng đến os/exec:

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

Trả lời

5

Không bao gồm đường dẫn tuyệt đối đến symtarget.txt khi gọi os.Symlink; chỉ sử dụng nó khi ghi vào tệp:

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\n"), 0644) 
    symlink := filepath.Join(path, "symlink") 
    os.Symlink(target, symlink) 
} 
Các vấn đề liên quan