Posted to tcl by dbohdan at Mon Sep 21 08:21:05 GMT 2020view pretty
#! /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: