diff --git a/extract b/extract index 2a5aa6c..8e47862 100755 --- a/extract +++ b/extract @@ -1,36 +1,64 @@ #!/bin/bash -if [ $# -lt 1 ];then - echo "Usage: `basename $0` FILES" +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() { + arg="$1" + cd "$(dirname "$arg")" || exit + case "$arg" in + *.tar.bz2) + tar xjf "$arg" --one-top-level + local code=$? + ;; + *.tar.gz) + tar xzf "$arg" --one-top-level + local code=$? + ;; + *.bz2) + bunzip2 "$arg" + local code=$? + ;; + *.gz) + gunzip "$arg" + local code=$? + ;; + *.tar) + tar xf "$arg" --one-top-level + local code=$? + ;; + *.tbz2) + (tar xjf "$arg" --one-top-level) + local code=$? + ;; + *.tgz) + tar xzf "$arg" --one-top-level + local code=$? + ;; + *.zip) + a_dir=$(expr "$arg" : '\(.*\).zip') + 7z x "$arg" -o"$a_dir" + local code=$? + ;; + *.Z) + uncompress "$arg" + local code=$? + ;; + *.rar) + a_dir=$(expr "$arg" : '\(.*\).rar') + mkdir "$a_dir" + 7z x "$arg" -o"$a_dir" + local code=$? + ;; + *) + echo "'$arg' cannot be extracted via extract()" 1>&2 + exit 1 + ;; + esac + cd - || exit $? + exit $code } extract "$1"