#!/usr/bin/env bash
set -eo pipefail

if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    echo "Usage: $(basename "$0") <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       $(basename "$0") <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
    echo
    echo "Options:"
    echo "  -h, --help    Show this help message"
    exit 0
fi

for n in "$@"; do
    if [ ! -f "$n" ] ; then
        echo "File does not exist, skipping: '$n'"
        continue
    fi

    case "${n%,}" in
        # *.tar)      tar -xvf "$1"                         ;;
        # *.tbz2)     tar -jxvf "$1"                        ;;
        # *.tar.bz2)  tar -jxvf "$1"                        ;;
        # *.tgz)      tar -zxvf "$1"                        ;;
        # *.tar.gz)   tar -zxvf "$1"                        ;;
        # *.tar.xz)   tar -Jxvf "$1"                        ;;
        *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
                    tar xvf "$n"                      ;;
        *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
                    7z x ./"$n"                       ;;
        *.lzma)     unlzma ./"$n"                     ;;
        *.bz2)      bunzip2 ./"$n"                    ;;
        *.rar)      unrar x -ad ./"$n"                ;;
        *.gz)       gunzip ./"$n"                     ;;
        *.zip)      unzip ./"$n"                      ;;
        *.z)        uncompress ./"$n"                 ;;
        *.xz)       unxz ./"$n"                       ;;
        *.exe)      cabextract ./"$n"                 ;;
        *.pax)      cat "$1" | pax -r                 ;;
        *.pax.Z)    uncompress "$1" --stdout | pax -r ;;
        *)          echo "extract: '$n' - unknown archive method" ;;
    esac
done
