packrat
This commit is contained in:
parent
7afa559ff4
commit
5988fb5cf5
140
bin/prat
Executable file
140
bin/prat
Executable file
@ -0,0 +1,140 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
argv0="$0"
|
||||||
|
argv1="$1"
|
||||||
|
argv2="$2"
|
||||||
|
|
||||||
|
dep() {
|
||||||
|
! command -v "$1" >/dev/null 2>&1 \
|
||||||
|
&& printf "%s: Missing dependency for this operation with type %s: %s\n" \
|
||||||
|
"$argv0" "$argv2" "$1" 1>&2 \
|
||||||
|
&& exit 1 \
|
||||||
|
|| return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
deps() {
|
||||||
|
while [ -n "$1" ]; do
|
||||||
|
# shellcheck disable=SC2015
|
||||||
|
command -v "$1" >/dev/null 2>&1 \
|
||||||
|
&& printf "%s" "$1" && return 0 \
|
||||||
|
|| true
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
printf "%s: Programmer error. Please report.\n" "$argv0" 1>&2
|
||||||
|
exit 1 || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# this will alias GNU and busybox lses to the functionality of 9 ls
|
||||||
|
# - this is a stupid hack and GNU and busybox lses should do this
|
||||||
|
# by default
|
||||||
|
# shellcheck disable=SC2015
|
||||||
|
ls --version >/dev/null 2>&1 || ls -x >/dev/null 2>&1 \
|
||||||
|
&& alias ls="ls -1A ." \
|
||||||
|
|| alias ls="ls ."
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf "Usage: %s {c,cf,d,df} [type]\n" "$argv0" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
unsupported() {
|
||||||
|
printf "%s: Unknown/unsupported type %s for this operation\n" "$argv0" "$argv2" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -z "$3" ] || usage
|
||||||
|
|
||||||
|
case "$argv1" in
|
||||||
|
c)
|
||||||
|
case "$argv2" in
|
||||||
|
gzip)
|
||||||
|
dep gzip
|
||||||
|
gzip -c
|
||||||
|
# -c - output to standard output
|
||||||
|
;;
|
||||||
|
xzip)
|
||||||
|
dep xz
|
||||||
|
xzip -c
|
||||||
|
# -c - output to standard output
|
||||||
|
;;
|
||||||
|
*) unsupported ;;
|
||||||
|
esac ;;
|
||||||
|
d)
|
||||||
|
case "$argv2" in
|
||||||
|
gzip)
|
||||||
|
dep gzip
|
||||||
|
gzip -cd
|
||||||
|
# -c - output to standard output
|
||||||
|
# -d - decompress
|
||||||
|
;;
|
||||||
|
lzip)
|
||||||
|
# should be improved but is decent
|
||||||
|
method=$(deps lzip 7z)
|
||||||
|
[ -n "$method" ] || dep 7z
|
||||||
|
case $method in
|
||||||
|
7z)
|
||||||
|
7z x -bd -si -so -tlzip
|
||||||
|
# x - extract
|
||||||
|
# -bd - disable percentage indicator
|
||||||
|
# -si - read from standard input
|
||||||
|
# -so - output to standard output
|
||||||
|
# -tlzip - type: lzip
|
||||||
|
;;
|
||||||
|
lzip)
|
||||||
|
lzip -cd
|
||||||
|
# -c - output to standard output
|
||||||
|
# -d - decompress
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error
|
||||||
|
;;
|
||||||
|
esac ;;
|
||||||
|
tar)
|
||||||
|
dep tar
|
||||||
|
tar -xO
|
||||||
|
# -x - extract
|
||||||
|
# -O - output to standard output
|
||||||
|
;;
|
||||||
|
xzip)
|
||||||
|
dep xz
|
||||||
|
xz -cd
|
||||||
|
# -c - output to standard output
|
||||||
|
# -d - decompress
|
||||||
|
;;
|
||||||
|
*) unsupported ;;
|
||||||
|
esac ;;
|
||||||
|
cf)
|
||||||
|
case "$argv2" in
|
||||||
|
*) unsupported ;;
|
||||||
|
esac ;;
|
||||||
|
df)
|
||||||
|
case "$argv2" in
|
||||||
|
tar)
|
||||||
|
dep tar
|
||||||
|
tar -x
|
||||||
|
;;
|
||||||
|
unrar)
|
||||||
|
# UNTESTED
|
||||||
|
unrar x - "$3"
|
||||||
|
# x - extract
|
||||||
|
# - - stop parsing switches
|
||||||
|
;;
|
||||||
|
zip)
|
||||||
|
# unzip can't extract files that start with a dash as far as I
|
||||||
|
# can tell, so we have to use 7z(1)
|
||||||
|
dep 7z
|
||||||
|
7z x -bd -o. -si -tzip >/dev/null
|
||||||
|
# x - extract
|
||||||
|
# -bd - disable percentage indicator
|
||||||
|
# -o. - output to current dir
|
||||||
|
# -si - read from standard input
|
||||||
|
# -tzip - type: zip
|
||||||
|
;;
|
||||||
|
*) unsupported ;;
|
||||||
|
esac ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
41
man/packrat.md
Normal file
41
man/packrat.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# packrat
|
||||||
|
|
||||||
|
Packrat is a centralization of programs' various command syntaxes for compressing and decompressing archives.
|
||||||
|
It's written in POSIX shell script (tested with dash) and the UI is very opinionated.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
`prat {c,d,cf,df} [type]`
|
||||||
|
|
||||||
|
### {c,d,cf,df}
|
||||||
|
|
||||||
|
- c - compress
|
||||||
|
- d - decompress
|
||||||
|
- cf - compress folder
|
||||||
|
- df - decompress folder
|
||||||
|
|
||||||
|
Packrat takes input from standard input and spews output to standard output, except for folder operations,
|
||||||
|
where it instead compresses all files in the current directory to standard output and always decompresses all files from standard input to the current directory.
|
||||||
|
There is no way to change this.
|
||||||
|
|
||||||
|
### supported types & dependencies
|
||||||
|
|
||||||
|
type | compression | decompression | folder compression | folder decompression
|
||||||
|
:--- | :--- | :--- | :--- | :---
|
||||||
|
**gzip** | `gzip` | `gzip` | not supported | not supported
|
||||||
|
**lzip** | not supported | `7z` or `lzip` | not supported | not supported
|
||||||
|
**tar** | not supported | `tar` | not supported | `tar`
|
||||||
|
**xzip** | `xz` | `xz` | not supported | not supported
|
||||||
|
**zip** | not supported | not supported | not supported | `7z`
|
||||||
|
|
||||||
|
### example usage
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pwd
|
||||||
|
/home/user/place_where_i_unzip_files/
|
||||||
|
$ prat d gzip <file.tar.lz.gz | prat d lzip | prat df tar
|
||||||
|
$ ls
|
||||||
|
file.tar.lz.gz
|
||||||
|
thing_that_was_also_in_the_archive.lol
|
||||||
|
thing_that_was_in_the_archive.ext
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user