go-unarr
Golang bindings for the unarr library from sumatrapdf.
unarr is a decompression library and CLI for RAR, TAR, ZIP and 7z archives.
GoDoc
See https://pkg.go.dev/github.com/gen2brain/go-unarr
Build tags
extlib- use external libunarr librarypkgconfig- enable pkg-config (used withextlib)static- use static library (used withpkgconfig)
Install CLI
go install github.com/gen2brain/go-unarr/cmd/unarr@latest
Example
unarr ./example.7z ./example/
Build
For one-off builds:
go build -o ./unarr ./cmd/unarr/*.goFor multi-platform cross-compile builds:
goreleaser --snapshot --skip-publish --rm-dist
Library Examples
Install Library
go get -v github.com/gen2brain/go-unarr
Open archive
a, err := unarr.NewArchive("test.7z") if err != nil { panic(err) } defer a.Close()
Read first entry from archive
err := a.Entry() if err != nil { panic(err) } data, err := a.ReadAll() if err != nil { panic(err) }
List contents of archive
list, err := a.List() if err != nil { panic(err) }
Read known filename from archive
err := a.EntryFor("filename.txt") if err != nil { panic(err) } data, err := a.ReadAll() if err != nil { panic(err) }
Read first 8 bytes of the entry
err := a.Entry() if err != nil { panic(err) } data := make([]byte, 8) n, err := a.Read(data) if err != nil { panic(err) }
Read all entries from archive
for { err := a.Entry() if err != nil { if err == io.EOF { break } else { panic(err) } } data, err := a.ReadAll() if err != nil { panic(err) } }
Extract contents of archive to destination path
_, err := a.Extract("/tmp/path") if err != nil { panic(err) }