如何使用golang更改符号链接的时间戳?

时间:2019-02-19 08:47:35

标签: go

SELECT * from table where server in ('server1','server2','server3') 始终遵循符号链接并更改实际文件的时间戳。 有没有方法可以更改符号链接的时间戳?

就像os.Chtimes一样。

2 个答案:

答案 0 :(得分:1)

至少从syscall包中不确定是否可行。

查看说syscall.Chtimes的源代码:

func Chtimes(name string, atime time.Time, mtime time.Time) error {
    var utimes [2]syscall.Timespec
    utimes[0] = syscall.NsecToTimespec(atime.UnixNano())
    utimes[1] = syscall.NsecToTimespec(mtime.UnixNano())
    if e := syscall.UtimesNano(fixLongPath(name), utimes[0:]); e != nil {
        return &PathError{"chtimes", name, e}
    }
    return nil
}

复制此代码-并删除我假设遵循符号链接的fixLongPath调用-仍然会影响目标文件,而不影响源符号链接。

即使在指向不存在的文件的符号链接上尝试此操作,也会返回运行时错误no such file or directory

CGO pkg-可以,但这似乎是过分的。

答案 1 :(得分:0)

您可以检查符号链接是否存在,如果存在,则将其删除并创建另一个符号链接。

if _, err := os.Lstat(symlinkPath); err == nil {
  os.Remove(symlinkPath)
}

err := os.Symlink(filePath, symlinkPath)
if err != nil {
  fmt.Println(err)
}