#!/bin/sh -e
# ex - archive extractor
# usage: ex <file>
for arg do
	if test -r "$arg"; then
		path="$(realpath "$arg")"
		name="$(basename "${path%.*}")"
		(
		if test "$(ls -U | wc -l)" -gt 2; then
			mkdir -p "$name"
			cd "$name"
		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 ;;
			(*.gz)          gunzip "$path"    ;;
			(*.bz2)         bunzip2 "$path"   ;;
			(*.rar)         unrar x "$path"   ;;
			(*.7z|*.z01)    7z x "$path"      ;;
			(*.deb)         ar x "$path"      ;;
			(*.zst)         unzstd "$path"    ;;
			(*.Z)           uncompress "$path";;
			(*)             echo "'$arg' cannot be extracted by ex" >&2;;
		esac
		)
	else
		echo "'$1' is not a readable file"
	fi
done