1 回答
TA贡献1803条经验 获得超6个赞
希望以下答案是您要找的。
如果您的问题更多是关于时间范围,您可以使用 function
Before
和After
fromtime
package如果您的问题更多是关于查找创建时间而不是修改时间。您可以考虑使用 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
}
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报