找出指定日志修改的文件
大约 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