Skip to content

gen2brain/go-unarr

Repository files navigation

go-unarr

Build Status GoDoc Go Report Card

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 library
  • pkgconfig - enable pkg-config (used with extlib)
  • static - use static library (used with pkgconfig)

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/*.go

For 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) }

About

Go bindings for unarr (decompression library for RAR, TAR, ZIP and 7z archives)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages