2016-02-21 13 views
8

Chciałbym utworzyć względne dowiązanie symboliczne w go przy użyciu pakietu os.Tworzenie względnego dowiązania symbolicznego za pośrednictwem pakietu os

os już contains the function: os.SymLink(oldname, newname string), ale nie może utworzyć względnych dowiązań symbolicznych.

Na przykład, jeśli uruchomię następujące:

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) 
} 

tworzy następujące w moim systemie plików:

$ 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 

Jak mogę używać golang tworzyć względne dowiązania symbolicznego, który wygląda tak:

$ 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 

Chcę coś, co jest powyżej symrelative.

Czy muszę uciekać się do os/exec:

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

Odpowiedz

5

Nie obejmują bezwzględną ścieżkę do symtarget.txt Dzwoniąc os.Symlink; używaj go tylko podczas zapisywania do pliku:

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) 
} 
Powiązane problemy