Posted to tcl by dbohdan at Mon Sep 21 08:21:05 GMT 2020view raw
- #! /usr/bin/env jimsh
- package require jimlib
- namespace import lib::$ lib::id
- proc decompressor path {
- set ext [file ext [$ path]]
- switch -- [$ ext] {
- .bz2 { list bzcat -- }
- .gz { list zcat -- }
- .lz4 { list lz4cat -- }
- .xz { list xzcat -- }
- .zst { list zstdcat -- }
- default { list cat -- }
- }
- }
- proc main files {
- set verbose 0
- if {[lindex [$ files] 0] eq {--verbose}} {
- set files [lrange [$ files] 1 end]
- set verbose 1
- }
- set ch stdout
- foreach file [$ files] {
- if {[$ verbose]} {
- puts stderr [list [$ file]]
- }
- set decomp [decompressor [$ file]]
- set dest $(
- [$ decomp] eq [list cat --]
- ? [$ file]
- : [file rootname [$ file]]
- )
- set contents [exec {*}[$ decomp] [$ file]]
- set stat [file stat [$ file]]
- lib::file::tar::write \
- [$ ch] \
- [$ contents] \
- -filename [$ dest] \
- -mtime [$ stat mtime] \
- -uid [$ stat uid] \
- -gid [$ stat gid] \
- -mode [$ stat mode] \
- }
- lib::file::tar::finish [$ ch]
- }
- main [$ argv]
- # vim: set syntax=tcl shiftwidth=4 smarttab expandtab: