#!/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 $# -lt 2 && "$(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