2016-02-21 6 views
8

के माध्यम से एक सापेक्ष प्रतीकात्मक लिंक बनाना, मैं ओएस पैकेज का उपयोग करके एक सापेक्ष प्रतीकात्मक लिंक बनाना चाहता हूं।ओएस पैकेज

ओएस पहले से ही contains the function: os.SymLink(oldname, newname string), लेकिन यह सापेक्ष सिम्लिंक नहीं बना सकता है।

उदाहरण के लिए

, अगर मैं निम्नलिखित चलाएँ:

$ 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 का उपयोग कैसे रिश्तेदार सिमलिंक कि तरह लग रहा है बनाने के लिए कर सकते हैं::

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

यह मेरी फाइल सिस्टम में निम्नलिखित बनाता है

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