2016-02-21 8 views
8

osパッケージを使用してgoで相対的なシンボリックリンクを作成したいと考えています。osパッケージを使用して相対的なシンボリックリンクを作成する

osすでにcontains the function: os.SymLink(oldname, newname string)ですが、相対的なシンボリックリンクを作成することはできません。例えば

、私は次のよう実行する場合:

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

を、それは私のファイルシステムに次のように作成します。

$ 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 

どのように私がどのように見えるの相対シンボリックリンクを作成するためにgolangを使用することができます。

$ 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 

私は上記のsymrelativeのようなものが欲しいです。

私はos/execに頼らなければならないの:

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

答えて

5

os.Symlinkを呼び出すときsymtarget.txtへの絶対パスを含めないでください。ファイルに書き込むときにのみ使用してください:

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) 
} 
関連する問題