亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 golang exec.Cmd 使用 tar 命令

如何使用 golang exec.Cmd 使用 tar 命令

Go
交互式愛情 2022-12-13 16:20:45
我有一個 tar.gz 文件,我需要使用 golang 解壓縮它。我試過像“archive/tar”這樣的庫,但它們給了我錯誤:archive/tar: invalid tar header.現在我的想法是使用 exec 運行 tar 命令并解壓 tarball,但它總是以代碼 2 退出。我的代碼:func unpack(tarName string) error {path, _ := os.Getwd()//err := Untar(path+"/"+tarName, path+"/")fmt.Printf(path + "/" + tarName)cmd := exec.Command("tar", "-xfv", path+"/"+tarName)cmd.Stdout = os.Stdouterr := cmd.Run()return err}
查看完整描述

1 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

如果您嘗試壓縮tar.gz文件,您首先需要解壓縮 gzip。



import (

    "archive/tar"

    "compress/gzip"

    "fmt"

    "io"

    "log"

    "os"

)


func ExtractTarGz(gzipStream io.Reader) {

    uncompressedStream, err := gzip.NewReader(gzipStream)

    if err != nil {

        log.Fatal("ExtractTarGz: NewReader failed")

    }


    tarReader := tar.NewReader(uncompressedStream)


    for true {

        header, err := tarReader.Next()


        if err == io.EOF {

            break

        }


        if err != nil {

            log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error())

        }


        switch header.Typeflag {

        case tar.TypeDir:

            if err := os.Mkdir(header.Name, 0755); err != nil {

                log.Fatalf("ExtractTarGz: Mkdir() failed: %s", err.Error())

            }

        case tar.TypeReg:

            outFile, err := os.Create(header.Name)

            if err != nil {

                log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error())

            }

            if _, err := io.Copy(outFile, tarReader); err != nil {

                log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error())

            }

            outFile.Close()


        default:

            log.Fatalf(

                "ExtractTarGz: uknown type: %s in %s",

                header.Typeflag,

                header.Name)

        }


    }

}

func main() {

    r, err := os.Open("./file.tar.gz")

    if err != nil {

        fmt.Println("error")

    }

    ExtractTarGz(r)

}


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號