Skip to content

Instantly share code, notes, and snippets.

@gengen1988
Created December 28, 2016 04:49
Show Gist options
  • Save gengen1988/11471cf82dd50c4846f4815a8bbd6a25 to your computer and use it in GitHub Desktop.
Save gengen1988/11471cf82dd50c4846f4815a8bbd6a25 to your computer and use it in GitHub Desktop.
uncompress tar.gz in go
package main
import (
"archive/tar"
"compress/gzip"
"fmt"
"io"
"os"
"path/filepath"
)
func main() {
err := ungzip("node-v0.6.9.tar.gz", "test")
if err != nil {
fmt.Println(err)
}
}
func ungzip(src, dest string) error {
reader, err := os.Open(src)
if err != nil {
return err
}
defer reader.Close()
archive, err := gzip.NewReader(reader)
if err != nil {
return err
}
defer archive.Close()
tarReader := tar.NewReader(archive)
for {
header, err := tarReader.Next()
if err == io.EOF {
break
} else if err != nil {
return err
}
path := filepath.Join(dest, header.Name)
info := header.FileInfo()
if info.IsDir() {
if err = os.MkdirAll(path, info.Mode()); err != nil {
return err
}
continue
}
file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode())
if err != nil {
return err
}
_, err = io.Copy(file, tarReader)
if err != nil {
file.Close()
return err
}
file.Close()
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment