如何遍历目录,根据文件时间排序

时间:2017-06-06 01:28:57

标签: go directory iteration directory-structure

Go提供开箱即用的目录迭代功能,_pytest.terminal.TerinalReporter包中有filepath.Walk

但是,path/filepath walks the file tree in lexical order。如何按照上次修改日期的顺序遍历文件树? THX

PS (接受答案后)我认为Go filepath.Walk函数应该为人们提供一种自己提供排序的方式,如下面的答案,其中接受{{1人们只需要自己对文件进行排序即可。

1 个答案:

答案 0 :(得分:4)

我认为,您应该自己实施,因为filepath.Walk不允许您设置顺序。

查看Walk方法。它调用walk,它依赖于readDirNames中的文件名。基本上,您应该使用另一个Walk逻辑来创建自己的readDirNames方法。

以下是按照上次修改日期的顺序获取文件的方法(请注意,我忽略了错误):

package main

import (
    "fmt"
    "os"
    "sort"
)

type ByModTime []os.FileInfo

func (fis ByModTime) Len() int {
    return len(fis)
}

func (fis ByModTime) Swap(i, j int) {
    fis[i], fis[j] = fis[j], fis[i]
}

func (fis ByModTime) Less(i, j int) bool {
    return fis[i].ModTime().Before(fis[j].ModTime())
}

func main() {
    f, _ := os.Open("/")
    fis, _ := f.Readdir(-1)
    f.Close()
    sort.Sort(ByModTime(fis))

    for _, fi := range fis {
        fmt.Println(fi.Name())
    }
}