main.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "path"
  6. "regexp"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. func main() {
  12. _, err := GetAllFile("/data/mongobackupdata/storage")
  13. if err != nil {
  14. fmt.Println(err)
  15. }
  16. fmt.Println("备份文件命名成功")
  17. }
  18. func GetAllFile(pathname string) ([]string, error) {
  19. result := []string{}
  20. fis, err := os.ReadDir(pathname)
  21. if err != nil {
  22. fmt.Printf("读取文件目录失败,pathname=%v, err=%v \n", pathname, err)
  23. return result, err
  24. }
  25. // 所有文件/文件夹
  26. for _, fi := range fis {
  27. fullname := pathname + "/" + fi.Name()
  28. // 是文件夹则递归进入获取;是文件,则压入数组
  29. if fi.IsDir() {
  30. temp, err := GetAllFile(fullname)
  31. if err != nil {
  32. fmt.Printf("读取文件目录失败,fullname=%v, err=%v", fullname, err)
  33. return result, err
  34. }
  35. result = append(result, temp...)
  36. } else {
  37. // 匹配时间戳命名的文件
  38. re := regexp.MustCompile(`\d{10}`)
  39. strs := re.FindAllString(fullname, -1)
  40. if len(strs) > 0 {
  41. // 格式化匹配到的时间
  42. backupTime := strs[0]
  43. backup, _ := strconv.Atoi(backupTime)
  44. tm := time.Unix(int64(backup), 0)
  45. timestr := tm.Format("2006-01-02 15:04:05")
  46. // 拼接需要重命名的文件带路径字符串
  47. suffix := path.Ext(fullname)
  48. fileSlice := strings.Split(fullname, "-")
  49. filePrefix := fileSlice[:len(fileSlice)-1]
  50. renamefile := strings.Join(filePrefix, "-") + "-" + timestr + suffix
  51. // 重命名文件
  52. os.Rename(fullname, renamefile)
  53. }
  54. result = append(result, fullname)
  55. }
  56. }
  57. return result, nil
  58. }