# # script : multi(Un)packer # version : 2.0_rc1 # author : enrique@barbeito.org # date : mar dic 30 16:05:14 CET 2003 # # Requirements: # - tar (http://www.gnu.org/software/tar/) # - gzip (http://www.gnu.org/software/gzip/gzip.html) # - zip (ftp://ftp.freesoftware.com/pub/infozip/Zip.html) # - rar (http://www.rarsoft.com/) # - unace (http://www.winace.com/) # - arj (http://arj.sourceforge.net/) # # Description: # Utilidad para el uso de multiples compresores. # Trabaja con tipos de archivo: tar, gzip, bzip2, zip, rar, ace y arj # Comprime, descomprime y lista el contenido de archivos comprimidos # # ## # ========= # ChangeLog # ========= # 2003-12-29 ebarbeito <enrique@barbeito.org> # * soporte para tipo de archivos TAR # * tratamiento de ficheros con espacios en sus nombres arreglado # gracias a pushakk (#linux @ irc-hispano.org) por la ayuda :-) # # 2003-12-22 ebarbeito <enrique@barbeito.org> # * funcion "fExt" creada --para simplificar codigo-- # # 2003-12-19 ebarbeito <enrique@barbeito.org> # * version 2.0_rc1 out! # * "fListar" retocada # * soporte para tipo de archivos ARJ # * selector "case" de la funcion "fComprime" # refinado con el uso de expresiones regulares # * Agrupacion de codigo en "fArgs" para simplificar # * funcion "fComprime" creada # # 2003-12-17 ebarbeito <enrique@barbeito.org> # * funcion "fListar" creada # * funcion "fDecomprimir" ampliada: # soporte para tipo de archivos RAR # soporte para tipo de archivos ACE # # 2003-12-16 ebarbeito <enrique@barbeito.org> # * funcion "fVersion" creada. # * funcion "fHelp" creada. # # 2003-12-15 ebarbeito <enrique@barbeito.org> # * version 1.0 # * reordenacion del codigo # * changelog iniciado # # ## # ==== # TODO # ==== # # **** creacion de flags especial para Gentoo (instalacion de compresores) # DONE soporte para gzip, bzip2, zip, rar, ace (listar contenido) # DONE soporte para gzip, bzip2, zip, rar, ace (compresion) # DONE centralizar la ayuda del script # DONE soporte para gzip, bzip2, zip, rar, ace (descompresion) # DONE TODO iniciado # # ## #!/bin/bash # # constantes y variables globales iniciadas # kSCRIPT=`basename $0` kVERSION=2.0_rc1 totales=0 # # fVersion() , muestra la version y autor del script # -------------------------------------------------- function fVersion { echo -e "\033[1;37m$kSCRIPT\033[0m version $kVERSION, 20031219 (!c)" echo -e "Enrique Barbeito García, <enrique@barbeito.org>" } # # fHelp() , muestra ayuda de uso del script # ----------------------------------------- function fHelp { echo -e "Uso: `basename $0` [opcion] fichero1 [fichero2 fichero3...]" echo echo -e "Opciones disponibles:" echo -e " -c out fichero1 [fichero2...] Comprime uno o varios ficheros generando el fichero \"out\"" echo -e " -d fichero1 [fichero2...] Descomprime uno o varios ficheros en el directorio actual." echo -e " -l fichero1 [fichero2...] Lista el contenido de uno o varios ficheros comprimidos." echo -e " -h, --help Muestra esta ayuda y finaliza." echo -e " -v, --version Informa de la version y finaliza." } # # fArgs() , muestra error cuando no se introducen los argumentos necesarios # ------------------------------------------------------------------------- function fArgs { echo -e "$kSCRIPT: numero de argumentos insuficiente" echo -e "Utilice '$kSCRIPT --help' para obtener ayuda." } # # fExt() , muestra error cuando se introducen extensiones no validas # ------------------------------------------------------------------ function fExt { echo -e "$kSCRIPT: Extension del fichero de $1 desconocida." echo -e "Debes utilizar cualquier nombre de archivo con extension:" echo -e " - .tar.gz : si quieres crear un fichero \"tar.gz\"" echo -e " - .tgz : si quieres crear un fichero \"tgz\"" echo -e " - .gz : si quieres crear un fichero \"gz\"" echo -e " - .bzip2 : si quieres crear un fichero \"bzip2\"" echo -e " - .tbz2 : si quieres crear un fichero \"tbz2\"" echo -e " - .zip : si quieres crear un fichero \"zip\"" echo -e " - .rar : si quieres crear un fichero \"rar\"" echo -e " - .ace : si quieres crear un fichero \"ace\"" echo -e " - .arj : si quieres crear un fichero \"arj\"" } # # fComprime() , procedimiento de generacion de un archivo comprimido # ------------------------------------------------------------------ function fComprime { local out="$1" extension=`expr "$1" : '.*\(\..*\)' '|' "$1"` shift case "$extension" in .[Gg][Zz]) tar cvfz "$out" "$@" > /dev/null let totales+=$# ;; .[Tt][Gg][Zz]) tar cvfz "$out" "$@" > /dev/null let totales+=$# ;; .[Bb][Zz][Ii][Pp]2) tar cvfj "$out" "$@" > /dev/null let totales+=$# ;; .[Tt][Bb][Zz]2) tar cvfj "$out" "$@" > /dev/null let totales+=$# ;; .[Zz][Ii][Pp]) zip -9 "$out" "$@" > /dev/null let totales+=$# ;; .[Rr][Aa][Rr]) rar a "$out" "$@" > /dev/null let totales+=$# ;; .[Aa][Cc][Ee]) echo -e "no he encontrado compresor para ace, lo siento :(" ;; .[Aa][Rr][Jj]) arj a "$out" "$@" > /dev/null let totales+=$# ;; *) fExt "salida" ;; esac } # # fDescomprime() , procedimiento de descompresion de archivos # ----------------------------------------------------------- function fDescomprime { case "$2" in 'gzip') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." tar xvfz "$1" > /dev/null let totales+=1 ;; 'bzip2') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." tar xvfj "$1" > /dev/null let totales+=1 ;; 'tar') echo -e "$kSCRIPT: desempaquetando \"$1\" ..." tar xvf "$1" > /dev/null let totales+=1 ;; 'Zip') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." unzip "$1" > /dev/null let totales+=1 ;; 'RAR') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." unrar x "$1" > /dev/null let totales+=1 ;; 'ACE') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." unace e "$1" > /dev/null let totales+=1 ;; 'ARJ') echo -e "$kSCRIPT: descomprimiendo \"$1\" ..." arj e "$1" > /dev/null let totales+=1 ;; *) if test ! -e "$1" then echo -e "$kSCRIPT: $1 no existe." else echo -e "$kSCRIPT: el tipo de archivo \"$2\" no esta soportado." fi ;; esac } # # fListar() , muestra el contenido de uno/varios archivo(s) comprimido(s) # ----------------------------------------------------------------------- function fListar { local lookFile="$1" extension=`expr "$1" : '.*\(\..*\)' '|' "$1"` shift case "$extension" in .[Gg][Zz]) tar tvfz "$lookFile" let totales+=1 ;; .[Tt][Gg][Zz]) tar tvfz "$lookFile" let totales+=1 ;; .[Bb][Zz][Ii][Pp]2) tar tvfj "$lookFile" let totales+=1 ;; .[Tt][Bb][Zz]2) tar tvfj "$lookFile" let totales+=1 ;; .[Tt][Aa][Rr]) tar tvf "$lookFile" let totales+=1 ;; .[Zz][Ii][Pp]) unzip -l "$lookFile" let totales+=1 ;; .[Rr][Aa][Rr]) rar t "$lookFile" let totales+=1 ;; .[Aa][Cc][Ee]) unace -l "$lookFile" let totales+=1 ;; .[Aa][Rr][Jj]) arj l "$lookFile" let totales+=1 ;; *) fExt "entrada" ;; esac } # -------------------- # # PROGRAMA PRINCIPAL # # -------------------- # case "$1" in '-c') shift if [ $# -lt 2 ] then fArgs echo else fComprime "$@" echo echo -e "Terminado. $totales fichero(s) comprimido(s)." echo fi ;; '-d') shift if [ $# -lt 1 ] then fArgs echo else for fichero in "$@" do fileType=`file "$1" | cut -f 2 -d : |cut -f 2 -d ' '` fDescomprime "$1" $fileType $totales shift done echo echo -e "Terminado. $totales fichero(s) descomprimido(s)." echo fi ;; '-l') shift if [ $# -lt 1 ] then fArgs echo else for fichero in "$@" do echo fListar "$1" shift done echo echo -e "Terminado. $totales fichero(s) listado(s)" fi ;; '-h') fHelp echo ;; '--help') fHelp echo ;; '-v') fVersion echo ;; '--version') fVersion echo ;; *) fArgs echo ;; esac #