跳至主要內容

找出指定日志修改的文件

OrangBus大约 1 分钟

语法

go run main.go -p upload -t 2022-01-01 -e php,jpg

源码

package main

import (
	"flag"
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"time"
)

var (
	path       string   // 文件后缀
	date       string   // 文件修改日期
	ext        string   // .php,.jpg
	extMapList []string // 文件扩展名列表
)

// 文件后缀是否包含指定的扩展名
func fileNameContainExt(filename string, extList []string) bool {
	result := false
	for _, v := range extList {
		split := strings.Split(filename, ".")
		fileExt := split[len(split)-1]
		if strings.Contains(fileExt, v) {
			result = true
			break
		}
	}
	return result
}

func findModifiedFiles(dirPath string, specifiedDay time.Time, extList []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
		}
		// 获取文件的修改时间
		//modTime := info.ModTime()
		// modTime.Year() == specifiedDay.Year() && int(modTime.Month()) == int(specifiedDay.Month()) && int(modTime.Day()) == int(specifiedDay.Day()) &&
		if !info.IsDir() && fileNameContainExt(file, extList) {
			fmt.Printf("在 %s 修改的文件: %s\n", specifiedDay.Format("2006-01-02"), file)
		}

		// 如果文件是目录,递归调用自身来检查子文件夹中的文件
		if info.IsDir() {
			findModifiedFiles(file, specifiedDay, extList)
		}
	}
}

// go run main.go -p upload -t 2022-01-01 -e php,jpg
func main() {
	nowTime := time.Now().Format("2006-01-02")
	flag.StringVar(&path, "p", "", "文件路劲,请使用绝对路径")
	flag.StringVar(&date, "t", nowTime, "文件修改日期,格式:"+nowTime)
	flag.StringVar(&ext, "e", "", "文件扩展名,例如:.php,.jpg")
	flag.Parse()

	fmt.Printf("扫描路径: %s\n", path)
	fmt.Printf("文件修改日期: %s\n", date)
	fmt.Printf("包含的文件后缀: %s\n", ext)

	// 解析文件后缀
	extMapList = strings.Split(ext, ",")

	d, err := time.Parse(time.DateOnly, date)
	if err != nil {
		fmt.Println(err)
		return
	}
	findModifiedFiles(path, d, extMapList)
	fmt.Println("扫描完成!")
}

打包运行

go build main.go