CyberAlberto

Mi rincón personal en internet

Scripts para compresión y descompresión

Aunque esto se puede ya hacer de una manera muy fácil gracias a las interfaces gráficas y programas de compresión en modo gráfico, hay momentos en los que necesitamos de un simple script que comprima la carpeta actual o descomprima un fichero en formato .tar.gz, .tbz, .tar.bz o .tbz. Esas veces que estás en modo texto programando y quieres empaquetar todo el código fuente en un simple fichero.

Estos scripts tienen ya muchos años de antigüedad, pero al recordar que aún no lo tenía instalado en mi portátil, he decidido mostrarlo por si a alguien le sirve.

El compresor:

El compresor dado un nombre de fichero comprime el directorio actual y lo almacena en el directorio home del usuario. Si además le indicamos gz o bzip lo comprime en el formato indicado.

Por ejemplo: $ comprime fichero bzip que crea el fichero ~/fichero.tar.bz el cual contiene todos los ficheros del directorio en el cual se lanzó el compresor. El código es:

#!/bin/bash

if [ "$2" = "gzip" ]; then
	echo "Se ha elegido gzip como compresor."
	compresor="z"
	extension="gz"
else
	if [ "$2" = "bzip" ]; then
		echo "Se ha elegido bzip2 como compresor."
		compresor="j"
		extension="bz2"
	else
		if [ "$2" = "" ]; then
			compresor="z"
			extension="gz"
		else
			echo "Error: El parámetro debe ser gzip o bzip"
			exit 1
		fi
	fi
fi

if [ $1 ] ; then
	FICHERO=$(basename $1)
	tar cvf$compresor ~/$FICHERO.tar.$extension .
	echo
	echo Fichero ~/$FICHERO.tar.$extension creado.
	exit 0
fi

echo
echo Script para comprimir ficheros y directorios, uso:
echo
echo $(basename $0) NOMBRE \[FORMATO\]
echo
echo \(Donde NOMBRE indica el nombre del fichero que se va a generar tras comprimir el directorio actual y FORMATO el compresor a usar\)
echo
echo Nota: Si no se indica FORMATO, se utilizará gzip
echo
exit 1

El descompresor:

Descomprime el fichero dentro de un directorio que no debe existir previamente, para evitar sobreescribir su contenido por accidente. Por ejemplo: $ descomprime paquete.tar.gz que genera el directorio paquete que cuelga del directorio actual y descomprime en él el contenido del fichero paquete.tar.gz.

#!/bin/bash

if [ "$1" != "" ]; then
	if [ -f "$1" ] ; then
		DIRECTORIO=$(basename $(basename "$1" .tgz) .tar.gz)
		DIRECTORIO=$(basename $(basename "$DIRECTORIO" .tbz2) .tar.bz2)
		if [ -d "$DIRECTORIO" ] ; then
			echo
			echo Error: No se puede descomprimir, existe el directorio ./$DIRECTORIO
			exit 1
		else
			mkdir "$DIRECTORIO"
			tar -xvC "$DIRECTORIO" -f "$1"
			echo
			echo Fichero $1 descomprimido.
			exit 0
		fi
	fi
fi

echo
echo Script para descomprimir ficheros y directorios en formato .tgz (.tar.gz) o .tbz2 (.tar.bz2), uso:
echo
echo $(basename $0) FICHERO
echo
echo \(Donde FICHERO indica el nombre del fichero comprimido\)
echo
echo Nota: se descomprime a un directorio.
echo
exit 1

Los scripts estan probados y funcionan en Linux, Solaris y MacOS, pero requieren que esté en el PATH tanto la utilidad tar como gzip y bzip2. Estos scripts son de uso libre, además las críticas positivas o posibles mejoras siempre son bien recibidas.

Y basándose en el compresor, puede que nos venga bien este script que comprime el directorio actual sin tener que especificar nada y añade la fecha al nombre del fichero, la utilidad se llama backup. Muy útil para guardar un historial del contenido de un proyecto.

#!/bin/bash

nombre=$(date +%Y-%m-%d.%H-%M).$(basename $(pwd))

comprime \"$nombre\" bzip
Anuncios

Jueves, 5 febrero 2009 - Posted by | Personal, programación, Script bash

1 comentario

  1. […] Ampliación de los scripts de compresión Hace unos días mostré el código para comprimir en formato .tar.gz y .tar.bz2. […]

    Pingback por Ampliación de los scripts de compresión « CyberAlberto | Jueves, 19 febrero 2009


Sorry, the comment form is closed at this time.

A %d blogueros les gusta esto: