Is it possible to extract a tar.xz package in golang? My understanding is it's possible to use the library for tar and sending it to an xz go library.
3条回答 默认 最新
- dqq9695 2015-07-18 12:13关注
I recently created an XZ decompression package so it is now possible to extract a tar.xz using only Go code.
The following code extracts the file
myfile.tar.xz
to the current directory:package main import ( "archive/tar" "fmt" "io" "log" "os" "github.com/xi2/xz" ) func main() { // Open a file f, err := os.Open("myfile.tar.xz") if err != nil { log.Fatal(err) } // Create an xz Reader r, err := xz.NewReader(f, 0) if err != nil { log.Fatal(err) } // Create a tar Reader tr := tar.NewReader(r) // Iterate through the files in the archive. for { hdr, err := tr.Next() if err == io.EOF { // end of tar archive break } if err != nil { log.Fatal(err) } switch hdr.Typeflag { case tar.TypeDir: // create a directory fmt.Println("creating: " + hdr.Name) err = os.MkdirAll(hdr.Name, 0777) if err != nil { log.Fatal(err) } case tar.TypeReg, tar.TypeRegA: // write a file fmt.Println("extracting: " + hdr.Name) w, err := os.Create(hdr.Name) if err != nil { log.Fatal(err) } _, err = io.Copy(w, tr) if err != nil { log.Fatal(err) } w.Close() } } f.Close() }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报