Как изменить временную метку для символьной ссылки, используя golang? - PullRequest
0 голосов
/ 19 февраля 2019

os.Chtimes всегда следовать символическим ссылкам и изменять временные метки реальных файлов.Есть ли способ изменить временную метку символических ссылок?

Точно так же, как touch -h.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Не уверен, что это возможно, по крайней мере из пакета 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.

A CGO pkg - может, но это кажется излишним.

0 голосов
/ 19 февраля 2019

Вы можете проверить, существует ли символическая ссылка, и если да, удалить ее и создать другую.

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

err := os.Symlink(filePath, symlinkPath)
if err != nil {
  fmt.Println(err)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...