GOLANG - 查找在日期范围内创建的文件

我想知道如何在日期范围内的特定文件夹中查找文件。例如:我想在文件夹 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

}


慕田峪7331174
浏览 133回答 1
1回答

慕码人8056858

希望以下答案是您要找的。如果您的问题更多是关于时间范围,您可以使用 functionBefore和Afterfrom timepackage如果您的问题更多是关于查找创建时间而不是修改时间。您可以考虑使用 package syscall 来查找 atime、mtime 和 ctime——本质上它们是:atime (access time) 是文件访问时间mtime(modify time)是文件修改时间ctime(change time)是inode或者文件的改变时间package mainimport (    "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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go