|
@@ -1,102 +1,102 @@
|
|
package test
|
|
package test
|
|
|
|
|
|
-import (
|
|
|
|
- "archive/zip"
|
|
|
|
- "fmt"
|
|
|
|
- "io"
|
|
|
|
- "os"
|
|
|
|
- "os/exec"
|
|
|
|
- "path/filepath"
|
|
|
|
- "strings"
|
|
|
|
- "testing"
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-func TestZip(t *testing.T) {
|
|
|
|
- //src := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20)"
|
|
|
|
- //dest := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20).zip"
|
|
|
|
- //excludeDir := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20)\\搜索引擎" // 你想排除的子目录
|
|
|
|
- //err := ZipDir(src, dest, excludeDir)
|
|
|
|
- //if err != nil {
|
|
|
|
- // fmt.Println("Error:", err)
|
|
|
|
- // return
|
|
|
|
- //}
|
|
|
|
- //fmt.Println("Zip created successfully:", dest)
|
|
|
|
- ZipDir2("/root/pjirobot/data/", "/root/pjirobot/data.zip", []string{"config", "map", "mapBuf"})
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// 压缩指定目录到ZIP文件,并排除一个指定的子目录
|
|
|
|
-func ZipDir(src, dest, excludeDir string) error {
|
|
|
|
- zipf, err := os.Create(dest)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- defer zipf.Close()
|
|
|
|
-
|
|
|
|
- archive := zip.NewWriter(zipf)
|
|
|
|
- defer archive.Close()
|
|
|
|
-
|
|
|
|
- filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- header, err := zip.FileInfoHeader(info)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 修正文件路径,使其相对于src
|
|
|
|
- header.Name, err = filepath.Rel(src, path)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 如果路径包含要排除的目录,则跳过
|
|
|
|
- if strings.Contains(header.Name, excludeDir) {
|
|
|
|
- if info.IsDir() {
|
|
|
|
- return filepath.SkipDir // 如果是目录,则跳过整个目录
|
|
|
|
- }
|
|
|
|
- return nil // 如果是文件,则忽略该文件
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- 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)
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- return nil
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-func ZipDir2(src string, dest string, dirs []string) {
|
|
|
|
- // 创建 zip 命令参数
|
|
|
|
- args := []string{"-r", dest}
|
|
|
|
- for _, dir := range dirs {
|
|
|
|
- args = append(args, filepath.Join(src, dir))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 创建 zip 命令
|
|
|
|
- cmd := exec.Command("zip", args...)
|
|
|
|
-
|
|
|
|
- // 设置工作目录
|
|
|
|
- cmd.Dir = src
|
|
|
|
-
|
|
|
|
- // 执行 zip 命令并获取输出
|
|
|
|
- fmt.Println(args)
|
|
|
|
-}
|
|
|
|
|
|
+//import (
|
|
|
|
+// "archive/zip"
|
|
|
|
+// "fmt"
|
|
|
|
+// "io"
|
|
|
|
+// "os"
|
|
|
|
+// "os/exec"
|
|
|
|
+// "path/filepath"
|
|
|
|
+// "strings"
|
|
|
|
+// "testing"
|
|
|
|
+//)
|
|
|
|
+//
|
|
|
|
+//func TestZip(t *testing.T) {
|
|
|
|
+// //src := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20)"
|
|
|
|
+// //dest := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20).zip"
|
|
|
|
+// //excludeDir := "C:\\Users\\mlxengingin\\Desktop\\0813\\go从入门到通天(20)\\搜索引擎" // 你想排除的子目录
|
|
|
|
+// //err := ZipDir(src, dest, excludeDir)
|
|
|
|
+// //if err != nil {
|
|
|
|
+// // fmt.Println("Error:", err)
|
|
|
|
+// // return
|
|
|
|
+// //}
|
|
|
|
+// //fmt.Println("Zip created successfully:", dest)
|
|
|
|
+// ZipDir2("/root/pjirobot/data/", "/root/pjirobot/data.zip", []string{"config", "map", "mapBuf"})
|
|
|
|
+//}
|
|
|
|
+//
|
|
|
|
+//// 压缩指定目录到ZIP文件,并排除一个指定的子目录
|
|
|
|
+//func ZipDir(src, dest, excludeDir string) error {
|
|
|
|
+// zipf, err := os.Create(dest)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+// defer zipf.Close()
|
|
|
|
+//
|
|
|
|
+// archive := zip.NewWriter(zipf)
|
|
|
|
+// defer archive.Close()
|
|
|
|
+//
|
|
|
|
+// filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// header, err := zip.FileInfoHeader(info)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// // 修正文件路径,使其相对于src
|
|
|
|
+// header.Name, err = filepath.Rel(src, path)
|
|
|
|
+// if err != nil {
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// // 如果路径包含要排除的目录,则跳过
|
|
|
|
+// if strings.Contains(header.Name, excludeDir) {
|
|
|
|
+// if info.IsDir() {
|
|
|
|
+// return filepath.SkipDir // 如果是目录,则跳过整个目录
|
|
|
|
+// }
|
|
|
|
+// return nil // 如果是文件,则忽略该文件
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// 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)
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+// return nil
|
|
|
|
+// })
|
|
|
|
+//
|
|
|
|
+// return nil
|
|
|
|
+//}
|
|
|
|
+//func ZipDir2(src string, dest string, dirs []string) {
|
|
|
|
+// // 创建 zip 命令参数
|
|
|
|
+// args := []string{"-r", dest}
|
|
|
|
+// for _, dir := range dirs {
|
|
|
|
+// args = append(args, filepath.Join(src, dir))
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// // 创建 zip 命令
|
|
|
|
+// cmd := exec.Command("zip", args...)
|
|
|
|
+//
|
|
|
|
+// // 设置工作目录
|
|
|
|
+// cmd.Dir = src
|
|
|
|
+//
|
|
|
|
+// // 执行 zip 命令并获取输出
|
|
|
|
+// fmt.Println(args)
|
|
|
|
+//}
|