簡體   English   中英

在Go中獲取文件夾的更改日期

[英]Get change date of a folder in Go

我想從終端獲取重命名文件夾的日期,可以使用stat命令來完成,例如:

> stat -x folders/folder1
File: "folders/folder1"
Size: 64           FileType: Directory
Mode: (0755/drwxr-xr-x)         Uid: (2006390509/username)  Gid: 
(296108113/EMEA\Domain Users)
Device: 1,4   Inode: 2599274    Links: 2
Access: Mon Nov 12 17:59:57 2018
Modify: Mon Nov 12 14:12:20 2018
Change: Mon Nov 12 17:28:01 2018 

更改日期是文件夾元數據更改的最后日期,其中包括重命名。

有沒有辦法在不使用os.exec並解析輸出的情況下使用Go獲得它? os.Stat似乎僅提供了上次修改日期,該日期在文件夾重命名時不會更改。

更改時間在os.FileInfo不可訪問,但可以通過存儲該數據的os.FileInfo.Sys()獲取。

你可以得到它

package main

import (
    "fmt"
    "log"
    "os"
    "syscall"
    "time"
)

func main() {
    f, err := os.Stat("your/dir")
    if err != nil {
        log.Fatalf("err reading: %v", err)
    }

    //access change time saved in os.FileInfo.Sys()
    changeTime := f.Sys().(*syscall.Stat_t).Ctim

    fmt.Print(time.Unix(changeTime.Unix()).String())
}

當然,您需要檢查f.Sys()是否為正確的類型,但是syscall.Stat_t.Ctim可能正是您想要的。

如果您對調用os.Exec感到滿意,也許您不介意跨平台問題。 前一段時間在github問題上對此進行了一些討論。

無論如何,這段代碼對我來說都很有用。 不確定如何/是否可以在Windows上運行:

file, err := os.Open("test")
if err != nil {
    panic(err)
}

stat, err := file.Stat()
sys := stat.Sys().(*syscall.Stat_t)
changedTime := time.Unix(sys.Ctim.Unix())

fmt.Println(stat.ModTime())
fmt.Println(changedTime)

當我跑步

mv test test1 && mv test1 test && go run main.go

它給了我:

2018-11-12 17:31:38.659095951 +0000 GMT
2018-11-12 17:57:43.042208583 +0000 GMT

這似乎正確反映了我更改目錄名的時間,而不是創建時間(如第一個日期)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM