亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GOLANG - 查找在日期范圍內創建的文件

GOLANG - 查找在日期范圍內創建的文件

Go
慕田峪7331174 2023-03-21 10:22:48
我想知道如何在日期范圍內的特定文件夾中查找文件。例如:我想在文件夾 X 中查找在 01-Aug-13 和 31-Aug-13 之間創建的所有文件。我試過這個:dir := "path/to/dir"t, err := time.Parse("2006-01-02T15:04:05-07:00", "2018-04-07T05:48:03+08:00")if err != nil {    panic(err)}paths, infos, err := FindFilesAfter(dir, t)if err != nil {    panic(err)}for i, _ := range paths {    checkFile(paths[i], infos[i])}func FindFilesAfter(dir string, t time.Time) (paths []string, infos []os.FileInfo, err error) {    err = filepath.Walk(dir, func(p string, i os.FileInfo, e error) error {        if e != nil {            return e        }        if !i.IsDir() && i.ModTime().After(t) {            paths = append(paths, p)            infos = append(infos, i)        }        return nil    })    return}
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

希望以下答案是您要找的。

  • 如果您的問題更多是關于時間范圍,您可以使用 functionBeforeAfterfrom timepackage

  • 如果您的問題更多是關于查找創建時間而不是修改時間。您可以考慮使用 package syscall 來查找 atime、mtime 和 ctime——本質上它們是:

atime (access time) 是文件訪問時間

mtime(modify time)是文件修改時間

ctime(change time)是inode或者文件的改變時間

package main


import (

    "io/fs"

    "log"

    "os"

    "syscall"

    "time"

)


func main() {

    // prepare data

    start, _ := time.Parse(time.RFC3339, "2022-11-26T07:04:05Z")

    end, _ := time.Parse(time.RFC3339, "2022-11-26T08:10:00Z")

    var dir = "your path"


    files := FindFilesByDateRange(dir, start, end)


    // print result

    log.Printf("file range: %s-%s\n", start.Format(time.RFC3339), end.Format(time.RFC3339))

    for _, f := range files {

        log.Println(f.Name())

    }


}


func FindFilesByDateRange(dir string, start, end time.Time) []fs.FileInfo {

    fileSystem := os.DirFS(dir)

    var files []fs.FileInfo

    if err := fs.WalkDir(fileSystem, ".", func(path string, d fs.DirEntry, err error) error {

        if err != nil {

            log.Fatal(err)

        }

        fileInfo, err := d.Info()

        if err != nil {

            return err

        }

        stat := fileInfo.Sys().(*syscall.Stat_t)

        cDate := time.Unix(stat.Ctimespec.Sec, stat.Ctimespec.Nsec).UTC()

        if !d.IsDir() && (cDate.After(start) && cDate.Before(end)) {

            files = append(files, fileInfo)

        }

        return nil

    }); err != nil {

        return nil

    }

    return files

}


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號