Skip to content

nlepage/go-tarfs

Repository files navigation

go-tarfs

Go Reference GitHub release (latest SemVer) GitHub Workflow Status License Unlicense

Read a tar file contents using go1.16 io/fs abstraction

Usage

⚠️ go-tarfs needs go>=1.17

Install:

go get github.com/nlepage/go-tarfs

Use:

package main

import (
    "os"

    tarfs "github.com/nlepage/go-tarfs"
)

func main() {
    tf, err := os.Open("path/to/archive.tar")
    if err != nil {
        panic(err)
    }
    defer tf.Close()

    tfs, err := tarfs.New(tf)
    if err != nil {
        panic(err)
    }

    f, err := tfs.Open("path/to/some/file")
    if err != nil {
        panic(err)
    }
    defer f.Close() // frees the associated reader

    // use f...
}

More information at pkg.go.dev/github.com/nlepage/go-tarfs

Long living fs.FS

The io.Reader given to tarfs.New must stay opened while using the returned fs.FS (this is true only if the io.Reader implements io.ReaderAt).

Memory usage

Since v1.2.0 files content are not stored in memory anymore if the io.Reader given to tarfs.New implements io.ReaderAt.

Symbolic links

For now, no effort is done to support symbolic links.

Show your support

Give a ⭐️ if this project helped you!

Contributors ✨

All Contributors

Thanks goes to these wonderful people (emoji key):

Nicolas Lepage
Nicolas Lepage

💻 ⚠️ 💡 🚧 👀
Jonas Plum
Jonas Plum

⚠️ 💻
MengYX
MengYX

🐛 💻
Andrey Dyatlov
Andrey Dyatlov

🐛 💻 ⚠️
Joe Lanford
Joe Lanford

💻 👀 🐛

This project follows the all-contributors specification. Contributions of any kind welcome!

📝 License

This project is unlicensed, it is free and unencumbered software released into the public domain.