I'm attempting to create a compressed tar archive using the Go standard library, specifically compress/gzip and archive/tar. I can successfully create a tar archive, but when I try to compress said archive, the resulting tarball can't be decompressed. On OSX, I get "Error 1 - Operation Not Permitted"
To run this code, you'll need a file named foo.txt
in the same directory.
package main
import (
"archive/tar"
"bytes"
"compress/gzip"
"io/ioutil"
"log"
"os"
)
func main() {
var b bytes.Buffer
// Create a new zip archive.
w := tar.NewWriter(gzip.NewWriter(&b))
fi, err := os.Stat("foo.txt")
if err != nil {
log.Fatal(err)
}
header, err := tar.FileInfoHeader(fi, "")
if err != nil {
log.Fatal(err)
}
err = w.WriteHeader(header)
if err != nil {
log.Fatal(err)
}
contents, err := ioutil.ReadFile("foo.txt")
if err != nil {
log.Fatal(err)
}
_, err = w.Write(contents)
if err != nil {
log.Fatal(err)
}
err = w.Close()
// Make sure to check the error on Close.
err = ioutil.WriteFile("foo.tar.gz", b.Bytes(), 0666)
if err != nil {
log.Fatal(err)
}
}