main.go 1.5 KB

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