英文:
Avoid parent folder structure when creating tar
问题
你可以按照以下方式修改该方法来实现你的需求:
在给定的链接中,找到并打开folders.go
文件。在该文件中,你可以找到compress
方法的实现。
在该方法中,你可以看到它使用了filepath.Walk
函数来遍历源文件夹中的所有文件和子文件夹。在每次遍历时,它会将文件或文件夹的路径添加到tar文件中。
要避免父文件夹结构,你可以在每次遍历时检查当前文件或文件夹的路径是否包含父文件夹的路径。如果包含,则将其添加到tar文件中时去除父文件夹路径。
以下是一个示例修改的代码片段:
func compress(src string, dst string) error {
// 创建 tar 文件
tarFile, err := os.Create(dst)
if err != nil {
return err
}
defer tarFile.Close()
// 创建 tar.Writer
tarWriter := tar.NewWriter(tarFile)
defer tarWriter.Close()
// 获取父文件夹路径
parentDir := filepath.Dir(src)
// 遍历源文件夹
err = filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 检查路径是否包含父文件夹路径
if strings.HasPrefix(path, parentDir) {
// 去除父文件夹路径
path = strings.TrimPrefix(path, parentDir)
}
// 创建 tar 文件中的文件或文件夹
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
header.Name = path
if err := tarWriter.WriteHeader(header); err != nil {
return err
}
// 如果是文件夹,则不需要写入内容
if !info.IsDir() {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(tarWriter, file); err != nil {
return err
}
}
return nil
})
return err
}
你可以将以上代码片段替换原始代码中的compress
方法实现。这样修改后的方法将在创建tar文件时避免父文件夹结构,直接包含文件。
希望对你有帮助!
英文:
https://github.com/mimoo/eureka/blob/master/folders.go
I am using the compress method given in the above link for creating Tar with recursive folder structure in Golang.
Now, say if I give /home/Documents/project
as src
Then, the created tar also contains /home/Documents/project/files
I want to avoid the parent folder structure here.
Ex. tar should directly contain : files
How can I modify this method to achieve this ?
Thanks in advance.
答案1
得分: 2
一个不修改代码的巧妙方法,如果你的程序没有并发逻辑,你可以这样做:
os.Chdir("/home/Documents/project")
compress("./", output)
英文:
A tricky method without modifying the code, If your program does not have concurrent logic, you can do this:
os.Chdir("/home/Documents/project")
compress("./", output)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论