#! /bin/sh # ############################################################################# NAME_="unpack2dir" HTML_="uncompress unpack compressed files" PURPOSE_="unpack zip, tar, tgz, tar.gz, tar.bz2, tar.z to a dir of the same name as archive prefix" SYNOPSIS_="$NAME_ [-vhlr] [file...]" REQUIRES_="standard GNU commands" VERSION_="1.2" DATE_="1999-09-20; last update: 2006-02-03" AUTHOR_="Dawid Michalczyk " URL_="www.comp.eonworks.com" CATEGORY_="compress" PLATFORM_="Linux" SHELL_="bash" DISTRIBUTE_="yes" # ############################################################################# # This program is distributed under the terms of the GNU General Public License # HISTORY: # 2006-02-03 v1.2 - added the -C flag to tar options. Otherwise tar would not # extract to a dir with different name then the one found in the # archive. usage () { echo >&2 "$NAME_ $VERSION_ - $PURPOSE_ Usage: $SYNOPSIS_ Requires: $REQUIRES_ Options: -r, remove the compressed file after extraction -v, verbose -h, usage and options (help) -l, see this script" exit 1 } # args check [ $# -eq 0 ] && { echo >&2 missing argument, type $NAME_ -h for help; exit 1; } # var init rmf= verbose= # option and argument handling while getopts vhlr options; do case $options in r) rmf=on ;; v) verbose=on ;; h) usage ;; l) more $0; exit 1 ;; \?) echo invalid argument, type $NAME_ -h for help; exit 1 ;; esac done shift $(( $OPTIND - 1 )) mkdirf() { # usage: fnc [ -d $1 ] && { echo "${NAME_}: skipping ${2} - dir ${1} already exist" ; continue; } #echo $1 mkdir $1 # [[ $verbose ]] && echo "${NAME_}: unpacking "$2 } file_getDirname() { local _dir="${1%${1##*/}}" [ "${_dir:=./}" != "/" ] && _dir="${_dir%?}" echo "$_dir" } file_getBasename() { local _name="${1##*/}" echo "${_name%$2}" } clean() { # usage [[ $1 != 0 ]] && rmdir $2 # remove empty dir if unpacking went wrong [[ $1 == 0 && $verbose ]] && echo "${NAME_}: unpacking " ${dir}/${a} [[ $rmf ]] && rm -f -- $a } start_dir=$(pwd) for a in "$@"; do cd $start_dir fname=$(file_getBasename $a) dir=$(file_getDirname $a) cd $dir a=$fname case $a in # zip *.[zZ][iI][pP]) mkdirf ${a/.[zZ][iI][pP]/} $a unzip -qq $a -d ${a/.[zZ][iI][pP]/} clean $? ${a/.[zZ][iI][pP]/} ;; # tar *.[tT][aA][rR]) mkdirf ${a/.[tT][aA][rR]/} $a tar -xf $a -C ${a/.[tT][aA][rR]/}/ clean $? ${a/.[tT][aA][rR]/} ;; # tgz *.[tT][gG][zZ]) mkdirf ${a/.[tT][gG][zZ]/} $a tar -xzf $a -C ${a/.[tT][gG][zZ]/} clean $? ${a/.[tT][gG][zZ]/} ;; # tar.gz *.[tT][aA][rR].[gG][zZ]) mkdirf ${a/.[tT][aA][rR].[gG][zZ]/} $a tar -xzf $a -C ${a/.[tT][aA][rR].[gG][zZ]/}/ clean $? ${a/.[tT][aA][rR].[gG][zZ]/} ;; # tar.bz2 *.[tT][aA][rR].[bB][zZ]2) mkdirf ${a/.[tT][aA][rR].[bB][zZ]2/} $a tar -xjf $a -C ${a/.[tT][aA][rR].[bB][zZ]2/}/ clean $? ${a/.[tT][aA][rR].[bB][zZ]2/} ;; # tar.z *.[tT][aA][rR].[zZ]) mkdirf ${a/.[tT][aA][rR].[zZ]/} $a tar -xZf $a -C ${a/.[tT][aA][rR].[zZ]/}/ clean $? ${a/.[tT][aA][rR].[zZ]/} ;; *) echo "${NAME_}: $a not a compressed file or lacks proper suffix" ;; esac done