Heim  >  Artikel  >  Backend-Entwicklung  >  GOLANG – Finden Sie Dateien, die innerhalb eines bestimmten Datumsbereichs erstellt wurden

GOLANG – Finden Sie Dateien, die innerhalb eines bestimmten Datumsbereichs erstellt wurden

WBOY
WBOYnach vorne
2024-02-09 22:30:08998Durchsuche

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

Bei unserer täglichen Arbeit müssen wir oft Dateien finden, die in einem bestimmten Datumsbereich erstellt wurden. In GOLANG können wir einige integrierte Funktionen und Bibliotheken verwenden, um diese Funktion zu erreichen. In diesem Artikel stellt der PHP-Editor Xiaoxin vor, wie man mit der Programmiersprache GOLANG die Funktion zum Suchen von Dateien innerhalb eines bestimmten Datumsbereichs implementiert. Ob für die tägliche Arbeit oder für persönliche Projekte, diese Funktion ist sehr praktisch, lassen Sie uns gemeinsam herausfinden!

Frageninhalt

Ich möchte wissen, wie ich Dateien in einem bestimmten Ordner innerhalb eines bestimmten Datumsbereichs finden kann. Beispiel: Ich möchte alle Dateien im Ordner x finden, die zwischen dem 1. August 2013 und dem 31. August 2013 erstellt wurden.

Ich habe Folgendes versucht:

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
}

Lösung

Ich hoffe, die folgende Antwort ist das, wonach Sie suchen. ​​p>

  • Wenn es bei Ihrer Frage eher um den Zeitbereich geht, können Sie time 包中的函数 beforeafter
  • verwenden
  • Wenn es bei Ihrer Frage eher um die Ermittlung der Erstellungszeit als um die Änderungszeit geht. Sie könnten erwägen, das Paket syscall zu verwenden, um atime, mtime und ctime zu finden – im Wesentlichen sind dies:

atime (Zugriffszeit) ist die Dateizugriffszeit

mtime (Änderungszeit) ist die Dateiänderungszeit

ctime (Änderungszeit) ist die Inode- oder Dateiänderungszeit

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
}

Das obige ist der detaillierte Inhalt vonGOLANG – Finden Sie Dateien, die innerhalb eines bestimmten Datumsbereichs erstellt wurden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen