diff options
| author | Marin Ivanov <[email protected]> | 2024-04-06 19:55:50 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2024-04-06 19:55:50 +0300 |
| commit | fae24c8056d5a97dd906238cd7d8c7e407094b3c (patch) | |
| tree | 41a7a69e32d839c60d0745d6940ba2b6e1c3fd1d /main.go | |
| parent | d08ac6d01bd0adba84f9227e83b288e36eebccc1 (diff) | |
first useful version
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -1,9 +1,55 @@ package main import ( + "archive/tar" + "io" + "log" + "os" + flag "github.com/spf13/pflag" ) func main() { + var prefix string + var verbose int + flag.CountVarP(&verbose, "verbose", "v", "add verbosity") + flag.StringVarP(&prefix, "prefix", "p", "", "adds prefix to filenames") flag.Parse() + + if err := process(prefix, verbose); err != nil { + log.Fatal(err) + } + +} + +func process(prefix string, verbose int) error { + tr := tar.NewReader(os.Stdin) + tw := tar.NewWriter(os.Stdout) + defer tw.Close() + for { + hdr, err := tr.Next() + if err == io.EOF { + break + } else if err != nil { + return err + } + + if verbose >= 1 { + log.Printf("file: %s", hdr.Name) + } + + hdr.Name = prefix + hdr.Name + + if err = tw.WriteHeader(hdr); err != nil { + return err + } + if _, err := io.Copy(tw, tr); err != nil { + return err + } + } + if err := tw.Flush(); err != nil { + return err + } + + return nil } |
