#!/bin/sh -eu


if [ -z "${1}" ]; then
    echo "extract: error: usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    exit 2
fi

if ! [ -f "${1}" ]; then
    echo "extract: error: '${1}' file does not exist" >&2
    exit 1
fi

readonly name="${1%%.*}"  # removes extension from filename
if [ -e "${name}" ]; then
    echo "extract: error: '${name}' exists" >&2
    exit 1
fi

mkdir "${name}" && cd "${name}" || exit 1

case "${1}" in
    *.tar.bz2)  tar xjf      ../"${1}" ;;
    *.tar.gz)   tar xzf      ../"${1}" ;;
    *.tar.xz)   tar xJf      ../"${1}" ;;
    *.lzma)     unlzma       ../"${1}" ;;
    *.bz2)      bunzip2      ../"${1}" ;;
    *.rar)      unrar x -ad  ../"${1}" ;;
    *.gz)       gunzip       ../"${1}" ;;
    *.tar)      tar xf       ../"${1}" ;;
    *.tbz2)     tar xjf      ../"${1}" ;;
    *.tgz)      tar xzf      ../"${1}" ;;
    *.zip)      unzip        ../"${1}" ;;
    *.Z)        uncompress   ../"${1}" ;;
    *.7z)       7z x         ../"${1}" ;;
    *.xz)       unxz         ../"${1}" ;;
    *.exe)      cabextract   ../"${1}" ;;
    *)          echo "extract: error: '${1}' - unknown archive method" >&2 ;;
esac
