#!/bin/sh set -eu if [ -z "${1}" ]; then echo "extract: error: usage: extract ." 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