actions.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Author: simon
  2. // Author: ynwdlxm@163.com
  3. // Date: 2025/1/26 16:05
  4. // Desc:
  5. package main
  6. import (
  7. "compress/gzip"
  8. "fmt"
  9. "io"
  10. "log"
  11. "os"
  12. "path/filepath"
  13. )
  14. func filterOut(path, ext string, minSize int64, info os.FileInfo) bool {
  15. if info.IsDir() || info.Size() < minSize {
  16. return true
  17. }
  18. if ext != "" && filepath.Ext(path) != ext {
  19. return true
  20. }
  21. return false
  22. }
  23. func listFile(path string, out io.Writer) error {
  24. _, err := fmt.Fprintln(out, path)
  25. return err
  26. }
  27. func delFile(path string, delLogger *log.Logger) error {
  28. if err := os.Remove(path); err != nil {
  29. return err
  30. }
  31. delLogger.Println(path)
  32. return nil
  33. }
  34. func archiveFile(destDir, root, path string) error {
  35. // Check destDir is a directory
  36. info, err := os.Stat(destDir)
  37. if err != nil {
  38. return err
  39. }
  40. if !info.IsDir() {
  41. return fmt.Errorf("%s is not a directory", destDir)
  42. }
  43. // Root path relative directory
  44. relDir, err := filepath.Rel(root, filepath.Dir(path))
  45. if err != nil {
  46. return err
  47. }
  48. // Create the new file name by adding the .gz suffix
  49. dest := fmt.Sprintf("%s.gz", filepath.Base(path))
  50. targetPath := filepath.Join(destDir, relDir, dest)
  51. // 创建所有目录
  52. if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil {
  53. return err
  54. }
  55. out, err := os.OpenFile(targetPath, os.O_RDWR|os.O_CREATE, 0644)
  56. if err != nil {
  57. return err
  58. }
  59. defer func(out *os.File) {
  60. err := out.Close()
  61. if err != nil {
  62. return
  63. }
  64. }(out)
  65. in, err := os.Open(path)
  66. if err != nil {
  67. return err
  68. }
  69. defer func(in *os.File) {
  70. err := in.Close()
  71. if err != nil {
  72. return
  73. }
  74. }(in)
  75. zw := gzip.NewWriter(out)
  76. zw.Name = filepath.Base(path)
  77. if _, err = io.Copy(zw, in); err != nil {
  78. return err
  79. }
  80. if err := zw.Close(); err != nil {
  81. return err
  82. }
  83. return out.Close()
  84. }