Skip to content

Instantly share code, notes, and snippets.

@lee8oi
Last active August 29, 2015 14:01
Show Gist options
  • Save lee8oi/9dfda7141f4c64f89f93 to your computer and use it in GitHub Desktop.
Save lee8oi/9dfda7141f4c64f89f93 to your computer and use it in GitHub Desktop.
Download a tar.bz2 file, decompressing & extracting on-the-fly.
package main
import (
"archive/tar"
"compress/bzip2"
"io"
"log"
"net/http"
"os"
)
func main() {
res, err := http.Get("http://downloads.sourceforge.net/project/liteide/X22/liteidex22.linux-64.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fliteide%2Ffiles%2FX22%2Fliteidex22.linux-64.tar.bz2")
if err != nil {
log.Fatal(err)
}
tr := bzip2.NewReader(res.Body)
r := tar.NewReader(tr)
defer res.Body.Close()
for {
hdr, err := r.Next()
if err == io.EOF {
break
}
fi := hdr.FileInfo()
mode := fi.Mode()
log.Println(hdr.Name)
if fi.IsDir() {
if err := os.MkdirAll(hdr.Name, mode); err != nil {
log.Fatalln(err)
}
continue
}
if len(hdr.Linkname) > 0 {
if err := os.Symlink(hdr.Linkname, hdr.Name); err != nil {
log.Fatalln(err)
}
continue
}
f, err := os.Create(hdr.Name)
if err != nil {
log.Fatalln(err)
}
defer f.Close()
if err := f.Chmod(mode); err != nil {
log.Fatalln(err)
}
if _, err := io.Copy(f, r); err != nil {
log.Fatalln(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment