how to compress multiple files to a single file using bzip2, in Go
func bz2CompressFiles(dstPath string, srcFiles []string) {
os.Remove(dstPath)
fileOut, err := os.Create(dstPath)
u.PanicIfErr(err)
cmd := exec.Command("bzip2", "--best", "-z")
cmd.Stdout = fileOut
stdin, err := cmd.StdinPipe()
u.PanicIfErr(err)
err = cmd.Start()
u.PanicIfErr(err)
var srcSize int64
for _, fileName := range srcFiles {
fi, err := os.Stat(fileName)
u.PanicIfErr(err)
srcSize += fi.Size()
r, err := os.Open(fileName)
u.PanicIfErr(err)
_, err = io.Copy(stdin, r)
u.PanicIfErr(err)
r.Close()
}
err = stdin.Close()
u.PanicIfErr(err)
err = cmd.Wait()
u.PanicIfErr(err)
err = fileOut.Close()
u.PanicIfErr(err)
fi, err := os.Stat(dstPath)
u.PanicIfErr(err)
srcSizeStr := humanize.Bytes(uint64(srcSize))
dstSizeStr := humanize.Bytes(uint64(fi.Size()))
fmt.Printf("compressed %s to %s, %d files to %s\n", srcSizeStr, dstSizeStr, len(srcFiles), dstPath)
for i := 0; i < len(srcFiles) && i < 0; i++ {
fmt.Printf("%s\n", srcFiles[i])
}
}