package main import ( "fmt" "os" "path" "regexp" "strconv" "strings" "time" ) func main() { _, err := GetAllFile("/data/mongobackupdata/storage") if err != nil { fmt.Println(err) return } fmt.Println("备份文件命名成功") } func GetAllFile(pathname string) ([]string, error) { result := []string{} fis, err := os.ReadDir(pathname) if err != nil { fmt.Printf("读取文件目录失败,pathname=%v, err=%v \n", pathname, err) return result, err } // 所有文件/文件夹 for _, fi := range fis { fullname := pathname + "/" + fi.Name() // 是文件夹则递归进入获取;是文件,则压入数组 if fi.IsDir() { temp, err := GetAllFile(fullname) if err != nil { fmt.Printf("读取文件目录失败,fullname=%v, err=%v", fullname, err) return result, err } result = append(result, temp...) } else { // 匹配时间戳命名的文件 re := regexp.MustCompile(`\d{10}`) strs := re.FindAllString(fullname, -1) if len(strs) > 0 { // 格式化匹配到的时间 backupTime := strs[0] backup, _ := strconv.Atoi(backupTime) tm := time.Unix(int64(backup), 0) timestr := tm.Format("2006-01-02 15:04:05") // 拼接需要重命名的文件带路径字符串 suffix := path.Ext(fullname) fileSlice := strings.Split(fullname, "-") filePrefix := fileSlice[:len(fileSlice)-1] renamefile := strings.Join(filePrefix, "-") + "-" + timestr + suffix // 重命名文件 os.Rename(fullname, renamefile) } result = append(result, fullname) } } return result, nil }