LingxinMeng 10 달 전
부모
커밋
e17e005bc3
1개의 변경된 파일10개의 추가작업 그리고 61개의 파일을 삭제
  1. 10 61
      common/util/u_io.go

+ 10 - 61
common/util/u_io.go

@@ -1,11 +1,11 @@
 package util
 
 import (
-	"archive/zip"
 	"fmt"
 	"io"
 	"io/fs"
 	"os"
+	"os/exec"
 	"path/filepath"
 	"sort"
 	"strings"
@@ -13,73 +13,22 @@ import (
 
 // 压缩指定目录到ZIP文件,并排除一个指定的子目录
 func ZipDir(src, dest, excludeDir string) error {
-	// 1. 创建目标文件
-	zipf, err := os.Create(dest)
+	// 获取相对路径,以便用于排除目录
+	relExcludeDir, err := filepath.Rel(src, excludeDir)
 	if err != nil {
 		return err
 	}
-	defer zipf.Close()
 
-	// 2. 创建ZIP写入器
-	archive := zip.NewWriter(zipf)
-	defer archive.Close()
+	// 构建zip命令
+	cmd := exec.Command("zip", "-r", dest, ".", "-x", filepath.Join(relExcludeDir, "*"))
 
-	// 3. 遍历目录
-	err = filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
-		if err != nil {
-			return err
-		}
-
-		// 生成相对路径
-		relPath, err := filepath.Rel(src, path)
-		if err != nil {
-			return err
-		}
-
-		// 判断是否为排除目录或其子目录
-		if strings.HasPrefix(relPath, excludeDir) {
-			if info.IsDir() {
-				return filepath.SkipDir // 跳过整个目录
-			}
-			return nil // 忽略该文件
-		}
-
-		header, err := zip.FileInfoHeader(info)
-		if err != nil {
-			return err
-		}
-
-		header.Name = relPath
-
-		if info.IsDir() {
-			header.Name += "/"
-		} else {
-			header.Method = zip.Deflate
-		}
-
-		writer, err := archive.CreateHeader(header)
-		if err != nil {
-			return err
-		}
-
-		if !info.IsDir() {
-			file, err := os.Open(path)
-			if err != nil {
-				return err
-			}
-			defer file.Close()
-
-			_, err = io.Copy(writer, file)
-			if err != nil {
-				return err
-			}
-		}
-
-		return nil
-	})
+	// 设置工作目录为要压缩的源目录
+	cmd.Dir = src
 
+	// 运行命令并捕获输出
+	output, err := cmd.CombinedOutput()
 	if err != nil {
-		return err
+		return fmt.Errorf("zip command failed: %v, output: %s", err, string(output))
 	}
 
 	return nil