41 lines
1.2 KiB
Bash
Executable File
41 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -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 |