// Author: simon // Author: ynwdlxm@163.com // Date: 2025/1/26 16:05 // Desc: package main import ( "compress/gzip" "fmt" "io" "log" "os" "path/filepath" ) func filterOut(path, ext string, minSize int64, info os.FileInfo) bool { if info.IsDir() || info.Size() < minSize { return true } if ext != "" && filepath.Ext(path) != ext { return true } return false } func listFile(path string, out io.Writer) error { _, err := fmt.Fprintln(out, path) return err } func delFile(path string, delLogger *log.Logger) error { if err := os.Remove(path); err != nil { return err } delLogger.Println(path) return nil } func archiveFile(destDir, root, path string) error { // Check destDir is a directory info, err := os.Stat(destDir) if err != nil { return err } if !info.IsDir() { return fmt.Errorf("%s is not a directory", destDir) } // Root path relative directory relDir, err := filepath.Rel(root, filepath.Dir(path)) if err != nil { return err } // Create the new file name by adding the .gz suffix dest := fmt.Sprintf("%s.gz", filepath.Base(path)) targetPath := filepath.Join(destDir, relDir, dest) // 创建所有目录 if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil { return err } out, err := os.OpenFile(targetPath, os.O_RDWR|os.O_CREATE, 0644) if err != nil { return err } defer func(out *os.File) { err := out.Close() if err != nil { return } }(out) in, err := os.Open(path) if err != nil { return err } defer func(in *os.File) { err := in.Close() if err != nil { return } }(in) zw := gzip.NewWriter(out) zw.Name = filepath.Base(path) if _, err = io.Copy(zw, in); err != nil { return err } if err := zw.Close(); err != nil { return err } return out.Close() }