1、查找文本文件
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
var files []string
root := "/your/file/path"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return nil
}
if !info.IsDir() && filepath.Ext(path) == ".txt" {
files = append(files, path)
}
return nil
})
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file)
}
}
2、根据文件大小查找文件
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
var files []string
func VisitFile(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return nil
}
file_size := info.Size()
if !info.IsDir() && file_size > 1024*1024 {
files = append(files, path)
}
return nil
}
func main() {
root := "/your/file/path"
err := filepath.Walk(root, VisitFile)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file)
}
}
3、根据修改时间查找文件
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"time"
)
func FindFilesAfter(dir string, t time.Time) (files []string, err error) {
err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return nil
}
if !info.IsDir() && filepath.Ext(path) == ".txt" && info.ModTime().After(t) {
files = append(files, path)
}
return nil
})
return
}
func main() {
root := "/your/file/path"
t, err := time.Parse("2006-01-02T15:04:05-07:00", "2021-05-01T00:00:00+00:00")
if err != nil {
log.Fatal(err)
}
files, err := FindFilesAfter(root, t)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file)
}
}
4、根据正则表达式查找文件
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"regexp"
)
var files []string
func VisitFile(path string, info os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return nil
}
if info.IsDir() || filepath.Ext(path) != ".txt" {
return nil
}
reg, err2 := regexp.Compile("^[la]")
if err2 != nil {
return err2
}
if reg.MatchString(info.Name()) {
files = append(files, path)
}
return nil
}
func main() {
err := filepath.Walk("/your/file/path", VisitFile)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file)
}
}
In the example, we search for text files that begin with letter l or letter a.
reg, err2 := regexp.Compile("^[la]")
We compile a regular expression with regexp.Compile.
if reg.MatchString(info.Name()) {
files = append(files, path)
}