dotfiles/.local/bin/scripts/ex

42 lines
1.3 KiB
Bash
Executable File

#!/bin/sh -e
# ex - archive extractor
# adapted and improved from the commonly circulating version
# detects whether unpacking into a subfolder is sensible
# and shows progress indications for some operations
# optdepends: rewrite(part of my dotfiles)
for arg do
if test -r "$arg"; then
path="$(realpath "$arg")"
name="$(basename "${path%.*}")"
namepart="$name.part"
(
if test "$(ls -U | wc -l)" -gt 2; then
mkdir -p "$namepart"
cd "$namepart"
fi
echo "Extracting $arg into $PWD"
case "$arg" in
(*.tar.*|*.tar) tar --extract --file "$path";;
(*.tbz2) tar xjf "$path" ;;
(*.tgz) tar xzf "$path" ;;
#(*.zip|*.jar) unzip "$path" | rewrite ;;
(*.7z|*.z01|*.zip|*.jar) 7z x "$path" ;;
(*.gz) gunzip "$path" ;;
(*.bz2) bunzip2 "$path" ;;
(*.rar) unrar x "$path" ;;
(*.deb) ar x "$path" ;;
(*.zst) unzstd "$path" ;;
(*.Z) uncompress "$path";;
(*) echo "'$arg' cannot be extracted by ex" >&2;;
esac
test "$(basename "$PWD")" = "$namepart" &&
if test "$(ls -U | wc -l)" -lt 3
then mv * .. && cd .. && rm -d "$namepart"
else cd .. && mv "$namepart" "$name"
fi
)
else
echo "'$1' is not a readable file"
fi
done