gpt4 book ai didi

go - 如何在 tar 中获取 tar 中文件的所需路径

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:46 27 4
gpt4 key购买 nike

我一直在使用这段代码写入一个 tar 文件。我称它为err = retarIt(dirTopDebug, path),其中 dirTopDebug 是我的 tar 文件 (/tmp/abc.tar) 的路径,并且 path 是我要添加的文件的路径(/tmp/xyz/...)。当我解压缩生成的 tar 文件时,我发现 abc.tar 文件以 /tmp/xyz/.. 格式放置。但我希望它们像 xyz/... 一样放在 tar 中,即没有 tmp 文件夹。

我该怎么做?

func TarGzWrite(_path string, tw *tar.Writer, fi os.FileInfo) {
fr, _ := os.Open(_path)
//handleError(err)
defer fr.Close()

h := new(tar.Header)
h.Name = _path
h.Size = fi.Size()
h.Mode = int64(fi.Mode())
h.ModTime = fi.ModTime()

err := tw.WriteHeader(h)
if err != nil {
panic(err)
}

_, _ = io.Copy(tw, fr)
//handleError( err )
}

func IterDirectory(dirPath string, tw *tar.Writer) {
dir, _ := os.Open(dirPath)
//handleError( err )
defer dir.Close()
fis, _ := dir.Readdir(0)
//handleError( err )
for _, fi := range fis {
fmt.Println(dirPath)
curPath := dirPath + "/" + fi.Name()
if fi.IsDir() {
//TarGzWrite( curPath, tw, fi )
IterDirectory(curPath, tw)
} else {
fmt.Printf("adding... %s\n", curPath)
TarGzWrite(curPath, tw, fi)
}
}
}

func retarIt(outFilePath, inPath string) error {
fw, err := os.Create(outFilePath)
if err != nil {
return err
}
defer fw.Close()
gw := gzip.NewWriter(fw)
defer gw.Close()

// tar write
tw := tar.NewWriter(gw)
defer tw.Close()

IterDirectory(inPath, tw)
fmt.Println("tar.gz ok")
return nil
}

最佳答案

使用在 tar header 中指定的任何名称。使用strings包的strings.LastIndex(或strings.Index)函数来分隔直到/tmp的部分。

因此,如果将上面 TarGzWrite 函数中的代码修改如下,它会按照您想要的方式工作(注意:您可能希望将下面的 strings.LastIndex 替换为 strings.Index)。

//TarGzWrite function same as above....
h := new(tar.Header)
//New code after this..
lastIndex := strings.LastIndex(_path, "/tmp")
fmt.Println("String is ", _path, "Last index is", lastIndex)
var name string
if lastIndex > 0 {
name = _path[lastIndex+len("/tmp")+1:]
fmt.Println("Got name:", name)
} else {
//This would not be needed, but was there just for testing my code
name = _path
}
// h.Name = _path
h.Name = name
h.Size = fi.Size()
h.Mode = int64(fi.Mode())

关于go - 如何在 tar 中获取 tar 中文件的所需路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43363650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com