我基本上想在Golang中实现这些命令:
cd somedir ; zip -r ../zipped.zip . * ; cd ..
我正在尝试压缩父目录中的文件夹和文件,而不包括父目录。这篇文章是类似的:
https://askubuntu.com/questions/521011/zip-an-archive-without-including-parent-directory
答案 0 :(得分:1)
"我如何递归拉链Golang"
像这样......
package rzip
import (
"archive/zip"
"io"
"os"
"path/filepath"
"strings"
)
func RecursiveZip(pathToZip, destinationPath string) error {
destinationFile, err := os.Create(destinationPath)
if err != nil {
return err
}
myZip := zip.NewWriter(destinationFile)
err = filepath.Walk(pathToZip, func(filePath string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
if err != nil {
return err
}
relPath := strings.TrimPrefix(filePath, filepath.Dir(pathToZip))
zipFile, err := myZip.Create(relPath)
if err != nil {
return err
}
fsFile, err := os.Open(filePath)
if err != nil {
return err
}
_, err = io.Copy(zipFile, fsFile)
if err != nil {
return err
}
return nil
})
if err != nil {
return err
}
err = myZip.Close()
if err != nil {
return err
}
return nil
}
至于docx文件和您的实施问题,如果不能看到您的代码,很难看出问题可能是什么。
编辑:
要创建包含同一目录中所有文件的zip,您只需更改在存档中创建的文件的路径。
relPath := strings.TrimPrefix(filePath, filepath.Dir(pathToZip))
zipFile, err := myZip.Create(relPath)
变为
flatPath := filepath.Base(pathToZip)
zipFile, err := myZip.Create(flatPath)
维护目录结构,但省略根目录
relPath := strings.TrimPrefix(filePath, pathToZip)
zipFile, err := myZip.Create(relPath)
干杯,
标记
答案 1 :(得分:0)
在这种情况下,您可以简单地使用以下代码段:
service := afs.New()
ctx := context.Background()
err := service.Copy(ctx, "file:///tmp/somedir", "file:/tmp/zipped.zip/zip:///", )
if err != nil {
log.Fatal(err)
}