找出指定目录下匹配的文件后缀
大约 1 分钟
语法
go run main.go -p="./site" -t=2024-03-11
示例源码
package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"strings"
"time"
)
var (
path string // 当前程序下面的文件路径
date string // 时间 2024-10-01
exclude string // 排除的文件夹
)
func findModifiedFiles(dirPath string, specifiedDay time.Time, exclude string) {
// 遍历目录下的所有文件和子目录
files, err := filepath.Glob(filepath.Join(dirPath, "*"))
if err != nil {
fmt.Println("无法获取目录下的文件:", err)
return
}
for _, file := range files {
info, err := os.Stat(file)
if err != nil {
fmt.Printf("无法获取文件 %s 的信息: %v\n", file, err)
continue
}
if strContainSlice(exclude, file) {
continue
}
// 获取文件的修改时间
modTime := info.ModTime()
if modTime.Year() == specifiedDay.Year() && int(modTime.Month()) == int(specifiedDay.Month()) && int(modTime.Day()) == int(specifiedDay.Day()) {
fmt.Printf("在 %s 修改的文件: %s\n", specifiedDay.Format("2006-01-02"), file)
}
// 检查文件的修改时间是否在今天或之后
//if modTime.After(time.Now().AddDate(0, 0, -1)) {
// fmt.Printf("修改的文件: %s\n", file)
//}
// 如果文件是目录,递归调用自身来检查子文件夹中的文件
if info.IsDir() {
findModifiedFiles(file, specifiedDay, exclude)
}
}
}
func strContainSlice(sliceStr, keyStr string) bool {
if sliceStr == "" {
return false
}
s := strings.Split(sliceStr, ",")
status := false
for _, v := range s {
if strings.Contains(keyStr, v) {
status = true
break
}
}
return status
}
// go run main.go -p="./site" -t=2024-03-11
func main() {
nowDate := time.Now().Format("2006-01-02")
flag.StringVar(&path, "p", "./", "当前目录下的文件路径:./web")
flag.StringVar(&date, "t", nowDate, nowDate)
flag.StringVar(&exclude, "i", "", "排除当前目录下的文件:public,node_modules,logs")
flag.Parse()
fmt.Printf("查询日期:%s\n", date)
fmt.Printf("扫描路径:%s\n", filepath.Join(path))
d, err := time.Parse(time.DateOnly, date)
if err != nil {
fmt.Println(err)
return
}
findModifiedFiles(path, d, exclude)
}
打包运行
go build main.go