golang find file

本文展示了四个使用Go语言实现的文件查找示例:1) 查找.txt文本文件;2) 根据文件大小超过1MB的文件;3) 查找指定日期之后修改的.txt文件;4) 使用正则表达式匹配文件名。这些示例涵盖了基本的文件过滤和搜索功能,适用于文件管理和自动化任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值