#!/bin/bash if [ $# -lt 1 ];then echo "Usage: `basename $0` FILES" exit 1 fi extract () { arg="$1" cd "$(dirname "$arg")" || exit case "$arg" in *.tar.bz2) tar xjf "$arg" --one-top-level ;; *.tar.gz) tar xzf "$arg" --one-top-level ;; *.bz2) bunzip2 "$arg" ;; *.gz) gunzip "$arg" ;; *.tar) tar xf "$arg" --one-top-level ;; *.tbz2) tar xjf "$arg" --one-top-level ;; *.tgz) tar xzf "$arg" --one-top-level ;; *.zip) a_dir=`expr "$arg" : '\(.*\).zip'` 7z x "$arg" -o"$a_dir" ;; *.Z) uncompress "$arg" ;; *.rar) a_dir=`expr "$arg" : '\(.*\).rar'` ; mkdir "$a_dir" ; 7z x "$arg" -o"$a_dir" ;; *) echo "'$arg' cannot be extracted via extract()" 1>&2 exit 1 ;; esac cd - || exit } extract "$1"