Compresor que genera ficheros autoextraíbles
Es una idea que siempre me ha rondado por la cabeza, hasta que he decidido desarrollarla. Quería tener un fichero comprimido con las instrucciones en su interior para descomprimirse a sí mismo.
Los ficheros generados por esta utilidad contienen un shell script en su cabecera que contiene las instrucciones para descomprimirse. La sobrecarga que produce es de poco más de medio Kbyte, por lo que no supone ningún inconveniente. Se ha probado en Mac OS X, Linux y CygWin, por lo que seguramente funcione en el resto de sabores UNIX (o lo que es lo mismo: en cualquier sistema operativo distinto de Windows). Para que funcione en Windows es necesario instalar CygWin.
Se necesitará tener instalados los siguientes ejecutables en el sistema: bash, tar, gzip, bzip2, cat, wc, tail, chmod, rm, mv. md5 y mkdir. Esto normalmente no supone ningun problema, debido a que son comandos estándar en cualquier distribución.
La sintáxis es la siguiente:
comprime nombre_de_archivo [formato_de_compresión]
- nombre_de_archivo: es el nombre de archivo a generar junto con su ruta
- formato_de_compresión: puede ser b (bzip2) o g (gzip)
Por ejemplo:
cd /home/user/documents comprime ~/fichero g
Crea el archivo ejecutable ~/fichero.tgz.sfx que contiene el directorio /home/user/documents comprimido mediante gzip
A la hora de descomprimir el fichero generado, se ha incluido código hash md5, para saber si ha sido alterado el fichero comprimido.
El código es el siguiente:
#!/bin/bash if [ "$2" = "g" ]; then compresor="z" extension="tgz" else if [ "$2" = "b" ]; then compresor="j" extension="tbz" else if [ "$2" = "" ]; then compresor="j" extension="tbz" else echo "ERROR: \"$2\" is an invalid format, choose g (gzip) or b (bzip2)." exit -1 fi fi fi if [ $1 ] ; then tar cvf$compresor /tmp/compressed . SIZE=$(cat /tmp/compressed | wc -c) SALIDA="$1.$extension.sfx" echo "#!/bin/bash" >/tmp/comp.sfx echo "">>/tmp/comp.sfx echo "SIZE=\"$SIZE\"">>/tmp/comp.sfx echo "compresor=\"$compresor\"">>/tmp/comp.sfx echo "extension=\"$extension\"">>/tmp/comp.sfx echo "fecha=\"$(date)\"">>/tmp/comp.sfx echo "mdf=\"$(cat /tmp/compressed | md5)\"">>/tmp/comp.sfx cat "$0" | tail -35 >>/tmp/comp.sfx cat /tmp/compressed >>/tmp/comp.sfx chmod 755 /tmp/comp.sfx rm /tmp/compressed mv /tmp/comp.sfx "$SALIDA" echo echo The file $SALIDA has been created. exit 0 fi echo echo SYNTAX: $(basename $0) filename [format] echo echo WHERE: echo " filename --> The desired name and path" echo " format --> g (gzip) or b (bzip2)" echo echo $(basename $0) compresses the current directory as a self-extracting file. echo echo exit 1 # -------------------------------------------------------- if [ -f "$0" ] ; then DIRECTORIO=$(basename $(basename "$0" .sfx) .$extension) if [ -d "$DIRECTORIO" ] ; then echo echo "ERROR: The directory named \"./$DIRECTORIO\" exists" exit -1 else echo "This file was packed on $fecha." echo while true do echo -n "Do you want to unpack the file named \"$0\" in the folder \"$DIRECTORIO\"? " read CONFIRM case $CONFIRM in y|Y|yes|yeS|yEs|yES|Yes|YeS|YEs|YES) break ;; n|N|no|NO|No|nO) exit ;; *) echo -n "(yes or no) " esac done mkdir "$DIRECTORIO" mdfc=\"$(tail -c $SIZE "$0" | md5)\" echo echo "MD5 Stored: \"$mdf\"" echo "MD5 Calculated: $mdfc" tail -c $SIZE "$0" | tar -x$compresor -C echo echo "File \"$0\" unpacked." exit 0 fi fi echo ERROR! exit -1
Puede ser descargado desde Sourceforge.
Lo siento, el formulario de comentarios está cerrado en este momento.
-
Recientes
- Los números de 2011
- Un nuevo hogar
- Cómo crear un disco de arranque Linux con una memoria flash
- Compresión y encriptación asimétrica mediante GPG: sfxcompress
- Plop, un gestor de arranque
- Utilizar un disco USB externo arrancable como copia de seguridad con Clonezilla
- Linux Mint 9 liberado
- Compresor que genera ficheros autoextraíbles
- Emulando el comando deltree de DOS
- Curiosa forma de anunciar una impresora
- Muere Michael Jackson
- Nuevo intento de timo
-
Enlaces
-
Archivos
- enero 2012 (1)
- abril 2011 (1)
- noviembre 2010 (2)
- julio 2010 (2)
- mayo 2010 (2)
- marzo 2010 (1)
- noviembre 2009 (1)
- junio 2009 (3)
- abril 2009 (1)
- marzo 2009 (3)
- febrero 2009 (10)
- enero 2009 (6)
-
Categorías
- A la española
- Análisis
- Cultura
- Curiosidades
- Efemérides
- Entretenimiento
- Frases célebres
- Frases patéticas
- Historia
- in-kultura
- Informática e Internet
- Investigación
- Libre pensamiento
- Música
- Noticias
- Noticias académicas
- Noticias y política
- Personal
- programación
- Reflexiones
- Script bash
- Sin categoría
- Telefonía
- Uncategorized
-
RSS
RSS de las entradas
RSS de los Comentarios