Вот, более качественный вариант, с учётом вашего скрипта и LHA.
При этом, в основном рабочий. Всё я сейчас проверить не в состоянии, т.к. состояние не комильфо.

#
# Unpack archives. Functions by `muhas` modified by Artiom N..
#

# Распаковка любого архива (http://muhas.ru/?p=55)
unpack()
{
   if [ $# -lt 1 ]; then
      echo "Usage: unpack <file> [args]" >&2
      return 1
   fi

   a_name="$1"
   lower_name="$(echo "$1" | tr A-Z a-z)"
   extract_dir="$( echo $(basename "$a_name") | sed "s/\.${1##*.}//g" )"
   shift

   if [ -r "$a_name" ] ; then
      case "$lower_name" in
         *.tar.bz2|*.tbz|*.tbz2)    tar xvjf          "$a_name" $*      ;;
         *.tar.gz|*.tgz)            tar xvzf          "$a_name" $*      ;;
         *.tar.xz)                  tar --xz -xvf     "$a_name" $*      ;;
         *.tar.zma|*.tlz)           tar --lzma -xvf   "$a_name" $*      ;;
         *.bz2)                     bunzip2           "$a_name" $*      ;;
         *.rar)                     unrar x           "$a_name" $*      ;;
         *.gz)                      gunzip            "$a_name" $*      ;;
         *.tar)                     tar xvf           "$a_name" $*      ;;
         *.zip)                     unzip             "$a_name" $*      ;;
         *.z)                       uncompress        "$a_name" $*      ;;
         *.7z)                      7za x             "$a_name" $*      ;;
         *.rar)                     unrar x           "$a_name" $*      ;;
         *.xz)                      unxz              "$a_name" $*      ;;
         *.arj)                     arj x             "$a_name" $*      ;;
         *.ace)                     unace x           "$a_name" $*      ;;
         *.lzm|*.lzma)              unlzma            "$a_name" $*      ;;
         *.lha)                     lha xv            "$a_name" $*      ;;
         *.deb)
                                    mkdir -p "$extract_dir/control"
                                    mkdir -p "$extract_dir/data"
                                    cd "$extract_dir"; ar vx "../${1}" > 
/dev/null
                                    cd control; tar xzvf ../control.tar.gz
                                    cd ../data; tar xzvf ../data.tar.gz
                                    cd ..; rm *.tar.gz debian-binary
                                    cd ..
                                                                        ;;
         *.ar)                      ar vx             "$a_name" $*      ;;
         *.cpio,*.rpm)              cpio -i $* <      "$a_name"         ;;
         *)                 echo "Cannot unpack '$a_name' $*..."        ;;
      esac
   else
      echo "'$a_name' is not a valid file"
   fi
}

# ... и упаковка (http://muhas.ru/?p=55)
pack()
{
   if [ $1 ] ; then
      case $1 in
         tbz)     tar cjvf $2.tar.bz2  $2                      ;;
         tgz)     tar czvf $2.tar.gz   $2                      ;;
         tar)     tar cpvf $2.tar      $2                      ;;
         bz2)     bzip                 $2                      ;;
         gz)      gzip -c -9 --best -n $2 > $2.gz              ;;
         zip)     zip -r $2.zip        $2                      ;;
         7z)      7z a $2.7z           $2                      ;;
         rar)     rar a $2.rar         $2                      ;;
         *)       echo "'$1' Cannot be packed via pack()"      ;;
      esac
   else
      echo "'$1' is not a valid file"
   fi
}

alias x=unpack


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/525ae238.3040...@yandex.ru

Ответить