delete_old_file.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package client
  2. import (
  3. "backup-x/entity"
  4. "backup-x/util"
  5. "io/ioutil"
  6. "log"
  7. "os"
  8. "strconv"
  9. "time"
  10. )
  11. // DeleteOldBackup for client
  12. func DeleteOldBackup() {
  13. // sleep 30 minutes
  14. time.Sleep(30 * time.Minute)
  15. for {
  16. conf, err := entity.GetConfigCache()
  17. if err == nil {
  18. for _, backupConf := range conf.BackupConfig {
  19. // read from current path
  20. backupFiles, err := ioutil.ReadDir(backupConf.GetProjectPath())
  21. if err != nil {
  22. log.Println("Read dir with error :", err)
  23. continue
  24. }
  25. // delete client files
  26. ago := time.Now()
  27. for _, conf := range conf.BackupConfig {
  28. lastDay, _ := time.ParseDuration("-" + strconv.Itoa(conf.SaveDays*24) + "h")
  29. ago = ago.Add(lastDay)
  30. // delete older file when file numbers gt MaxSaveDays
  31. for _, backupFile := range backupFiles {
  32. if backupFile.ModTime().Before(ago) {
  33. filepath := backupConf.GetProjectPath() + "/" + backupFile.Name()
  34. err := os.Remove(filepath)
  35. if err != nil {
  36. log.Printf("删除过期的文件 %s 失败", filepath)
  37. } else {
  38. log.Printf("删除过期的文件 %s 成功", filepath)
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
  45. // sleep
  46. util.SleepForFileDelete()
  47. }
  48. }