#
# 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
 
#
 
codigo/bash/mup.txt · Última modificación: 2006/12/08 22:39 (editor externo)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki