#!/bin/sh # Default behavior: Extract archive into new directory # Behavior with `-c` option: Extract contents into current directory while getopts "hc" o; do case "${o}" in c) extracthere="True" ;; *) printf 'Options:\n -c: Extract archive into current directory rather than a new one.\n' && exit ;; esac done if [ -z "$extracthere" ]; then archive="$(readlink -f "$*")" && directory=${archive%.*} && mkdir -p "$directory" && cd "$directory" || exit else archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")" fi [ "$archive" = "" ] && printf 'Give archive to extract as argument.\n' && exit if [ -f "$archive" ]; then case "$archive" in *.tar.bz2 | *.tar.xz | *.tbz2) tar xvjf "$archive" ;; *.tar.gz | *.tgz) tar xvzf "$archive" ;; *.lzma) unlzma "$archive" ;; *.bz2) bunzip2 "$archive" ;; *.rar) unrar x -ad "$archive" ;; *.gz) gunzip "$archive" ;; *.tar) tar xvf "$archive" ;; *.zip | *.jar | *.war) unzip "$archive" ;; *.Z) uncompress "$archive" ;; *.7z) 7z x "$archive" ;; *.xz) unxz "$archive" ;; *.exe) cabextract "$archive" ;; *.ace) unace x "$archive" ;; *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; esac else printf 'File "%s" not found.\n' "$archive" fi