file.go 898 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package file
  2. import (
  3. "os"
  4. "path/filepath"
  5. "sort"
  6. )
  7. // 搜索匹配文件,删除字典顺序排名靠前的文件
  8. // fmt.Sprintf("dumpTo%s.*.txt", name)
  9. func RemoveMatchedFiles(pattern string) error {
  10. // 使用filepath.Glob匹配文件
  11. matches, err := filepath.Glob(pattern)
  12. if err != nil {
  13. return err
  14. }
  15. // 遍历匹配到的文件路径
  16. var toUnlink []string
  17. for _, path := range matches {
  18. // fi, err := os.Stat(path)
  19. // if err != nil {
  20. // continue
  21. // }
  22. fl, err := os.Lstat(path)
  23. if err != nil {
  24. continue
  25. }
  26. if fl.Mode()&os.ModeSymlink == os.ModeSymlink {
  27. continue
  28. }
  29. toUnlink = append(toUnlink, path)
  30. }
  31. sort.Strings(toUnlink)
  32. rotationCount := 7
  33. if rotationCount >= len(toUnlink) {
  34. return nil
  35. }
  36. toUnlink = toUnlink[:len(toUnlink)-int(rotationCount)]
  37. // 尝试删除文件
  38. for _, path := range toUnlink {
  39. os.Remove(path)
  40. }
  41. return nil
  42. }