跳至主要內容

找出指定目录下匹配的文件后缀

OrangBus大约 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