dfetter@best.com
jcuenca@patan.eleinf.uv.es
bzip2
.
El texto original (en sgml) se encuentra
http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml
.
Bzip2 está creado con un magnífico nuevo algoritmo sobre compresión de datos. Generalmente consigue que los ficheros queden en un 60-70% del tamaño que tienen los ficheros comprimidos con gzip.
Este documento le llevará a través de unas cuantas aplicaciones para
bzip2
.
Los franco-hablantes tienen el documento traducido por Arnaud Launay. La
versión web está en
http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html
, y para
recoger por ftp
ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz
.
Puede contactar con Arnaud por correo electrónico
zoro@mygale.org
.
Aquellos que hablen Japonés pueden utilizar la versión Japonesa, de la
mano de Tetsu Isaji,
http://jf.gee.kyoto-u.ac.jp/JF/JF.html
. La página de Isaji está en
http://www2s.biglobe.ne.jp/~kaien/
, y su dirección de
correo electrónico es
isaji@mxu.meshnet.or.jp
.
lesspipe.sh
por sugerencia suya. Ahora debería
funcionar mejor.
.emacs
para las versiones 19.30 y
superiores por Ulrik Dickow.
(También se ha corregido el parche de jka-compr.el
por sugerencia
suya. ¡Eepa! Bzip2 todavía(¿?) no tiene parámetro ``append''.)
La página principal de bzip2
está
http://www.muraroa.demon.co.uk/
. El servidor réplica en los
Estados
Unidos es
http://www.digistar.com/bzip2/index.html
. También se puede
encontrar en la dirección ftp de Red Hat,
ftp://ftp.redhat.com/pub/contrib
.
Busque en las direcciones de las principales distribuciones. El fichero
compilado para intel de Red Hat es
ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm
.
El de Debian está
ftp://ftp.debian.org/debian/hamm/hamm/binary-i386/utils/bzip2_0.1pl2-4.deb
,
y la de Slackware está en
http://www.cdrom.com/pub/linux/slackware-3.4/slakware/a9/bzip2.tgz
.
También puede obtener los ficheros directorios análogos de cualquier servidor réplica.
El código está en los lugares oficiales (ver la sección
Obtención de bzip2 para obtener una lista de las
direcciones). Red Hat tiene el código en
ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm
.
Si tiene gcc 2.7.2.3, cambie la línea que pone
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
a
CFLAGS = -fomit-frame-pointer -funroll-loops
osea, quite el -O3
. Después de haber hecho ésto, sólo tiene que hacer
un make
e instalarlo siguiendo las instrucciones del fichero README.
Lea la bonita página man :)
Básicamente, hay dos formas de combinar bzip2
con tar
:
Este método no necesita configurar nada. Para desempaquetar un fichero
.tar.gz
, digamos algo.tar.bz, en el directorio actual, debemos hacer
/directorio/de/bzip2 -cd algo.tar.bz2 | tar xf -
Este método funciona, pero puede ser un poco pesado teclearlo todo cada vez que se necesite descomprimir algo.
Aplique el siguiente parche a gnu tar 1.12, compílelo, instálelo, y se
acabó. Asegúrese de que tanto tar
como bzip2
están en su
$PATH
con
which tar
which bzip2
Para utilizarlo, sólo tiene que hacer
tar xyf algo.tar.bz2
para descomprimir el fichero.
Para hacer un nuevo fichero comprimido hay que hacer algo parecido:
tar cyf algo.tar.bz2 fichero1 fichero2 fichero3...directorio1 directorio2...
Y aquí está el parche :)
*** tar.c.orig Sat Apr 26 05:09:49 1997
--- tar.c Feb 2 00:50:47 1998
***************
*** 16,21 ****
--- 16,24 ----
with this program; if not, write to the Free Software Foundation, Inc.,
59 Place - Suite 330, Boston, MA 02111-1307, USA. */
+ /* Feb 2 98: patched by David Fetter to use bzip2 as a
+ filter (option -y) */
+
#include "system.h"
#include <getopt.h>
***************
*** 196,201 ****
--- 199,206 ----
{"block-number", no_argument, NULL, 'R'},
{"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR},
{"blocking-factor", required_argument, NULL, 'b'},
+ {"bzip2", required_argument, NULL, 'y'},
+ {"bunzip2", required_argument, NULL, 'y'},
{"catenate", no_argument, NULL, 'A'},
{"checkpoint", no_argument, &checkpoint_option, 1},
{"compare", no_argument, NULL, 'd'},
***************
*** 372,377 ****
--- 377,383 ----
PATTERN at list/extract time, a globbing PATTERN\n\
-o, --old-archive, --portability write a V7 format archive\n\
--posix write a POSIX conformant archive\n\
+ -y, --bzip2, --bunzip2 filter the archive through bzip2\n\
-z, --gzip, --ungzip filter the archive through gzip\n\
-Z, --compress, --uncompress filter the archive through compress\n\
--use-compress-program=PROG filter through PROG (must accept -d)\n"),
***************
*** 448,454 ****
Y per-block gzip compression */
#define OPTION_STRING \
! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz"
static void
set_subcommand_option (enum subcommand subcommand)
--- 454,460 ----
Y per-block gzip compression */
#define OPTION_STRING \
! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxyz"
static void
set_subcommand_option (enum subcommand subcommand)
***************
*** 805,810 ****
--- 811,820 ----
case 'X':
exclude_option = 1;
add_exclude_file (optarg);
+ break;
+
+ case 'y':
+ set_use_compress_program_option ("bzip2");
break;
case 'z':
Para descomprimir los ficheros bzip2
al vuelo, esto es, para ser capaces
de utilizar less
en estos ficheros sin tener primero que
descomprimirlos, podemos crear un lesspipe.sh
(página man de
less
) como éste:
#!/bin/sh
# This is a preprocessor for 'less'. It is used when this environment
# variable is set: LESSOPEN="|lesspipe.sh %s"
case "$1" in
*.tar) tar tvvf $1 2>/dev/null ;; # View contents of various tar'd files
*.tgz) tar tzvvf $1 2>/dev/null ;;
# This one work for the unmodified version of tar:
*.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
#This one works with the patched version of tar:
# *.tar.bz2) tyvvf $1 2>/dev/null ;;
*.tar.gz) tar tzvvf $1 2>/dev/null ;;
*.tar.Z) tar tzvvf $1 2>/dev/null ;;
*.tar.z) tar tzvvf $1 2>/dev/null ;;
*.bz2) bzip2 -dc $1 2>/dev/null ;; # View compressed files correctly
*.Z) gzip -dc $1 2>/dev/null ;;
*.z) gzip -dc $1 2>/dev/null ;;
*.gz) gzip -dc $1 2>/dev/null ;;
*.zip) unzip -l $1 2>/dev/null ;;
*.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src
FILE=`echo $FILE | cut -d ' ' -f 2`
if [ "$FILE" = "troff" ]; then
groff -s -p -t -e -Tascii -mandoc $1
fi ;;
*) cat $1 2>/dev/null ;;
# *) FILE=`file -L $1` ; # Check to see if binary, if so -- view with 'strings'
# FILE1=`echo $FILE | cut -d ' ' -f 2`
# FILE2=`echo $FILE | cut -d ' ' -f 3`
# if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
# -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
# strings $1
# fi ;;
esac
He escrito el siguiente parche para jka-compr.el
que añade bzip2
al auto-compression-mode.
Renuncia: Sólo lo he comprobado con emacs-20.2, pero no tengo ninguna razón para creer que un parche parecido no pueda funcionar con otras versiones.
Para utilizarlo,
emacs-20.2/lisp
(o donde lo haya
desempaquetado)
jka-compr.el.diff
(en
este fichero sólo debe estar el parche ;)
patch < jka-compr.el.diff
M-x byte-compile-file jka-compr.el
jka-compr.elc
.
--- jka-compr.el Sat Jul 26 17:02:39 1997
+++ jka-compr.el.new Thu Feb 5 17:44:35 1998
@@ -44,7 +44,7 @@
;; The variable, jka-compr-compression-info-list can be used to
;; customize jka-compr to work with other compression programs.
;; The default value of this variable allows jka-compr to work with
-;; Unix compress and gzip.
+;; Unix compress and gzip. David Fetter added bzip2 support :)
;;
;; If you are concerned about the stderr output of gzip and other
;; compression/decompression programs showing up in your buffers, you
@@ -121,7 +121,9 @@
;;; I have this defined so that .Z files are assumed to be in unix
-;;; compress format; and .gz files, in gzip format.
+;;; compress format; and .gz files, in gzip format, and .bz2 files,
+;;; in the snappy new bzip2 format from http://www.muraroa.demon.co.uk.
+;;; Keep up the good work, people!
(defcustom jka-compr-compression-info-list
;;[regexp
;; compr-message compr-prog compr-args
@@ -131,6 +133,10 @@
"compressing" "compress" ("-c")
"uncompressing" "uncompress" ("-c")
nil t]
+ ["\\.bz2\\'"
+ "bzip2ing" "bzip2" ("")
+ "bunzip2ing" "bzip2" ("-d")
+ nil t]
["\\.tgz\\'"
"zipping" "gzip" ("-c" "-q")
"unzipping" "gzip" ("-c" "-q" "-d")
Este truco se lo tengo que agradecer a Ulrick Dickow,
ukd@kampsax.dk
, programador de
sistemas en Kampsax Technology:
Para hacer que se pueda utilizar bzip2
automáticamente cuando no es el
administrador del sistema, sólo tiene que añadir lo siguiente al
fichero .emacs
:
;; Automatic (un)compression on loading/saving files (gzip(1) and similar)
;; We start it in the off state, so that bzip2(1) support can be added.
;; Code thrown together by Ulrik Dickow for ~/.emacs with Emacs 19.34.
;; Should work with many older and newer Emacsen too. No warranty though.
;;
(if (fboundp 'auto-compression-mode) ; Emacs 19.30+
(auto-compression-mode 0)
(require 'jka-compr)
(toggle-auto-compression 0))
;; Now add bzip2 support and turn auto compression back on.
(add-to-list 'jka-compr-compression-info-list
["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
"zipping" "bzip2" ()
"unzipping" "bzip2" ("-d")
nil t])
(toggle-auto-compression 1 t)
Gracias a Arnaud Launay por su truco para ahorrar ancho de banda. Lo
siguiente debería ir en /etc/ftpconversions
para compresiones y
descompresiones al vuelo con bzip2
. Asegúrese de que las direcciones
(como /bin/compress
) son correctas.
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
:.bz2: : :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2
: : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2
: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
: : :.tar.bz2:/bin/tar -c -I -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2
tenthumbs@cybernex.net
dijo:
He encontrado una forma de hacer que Netscape (en Linux) utilice
bzip2
en Content-Encoding como si estuviese utilizando
gzip
. Añada ésto a $HOME/.Xdefaults
o
$HOME/.Xresources
Yo utilizo la opción -s
porque prefiero cambiar algo de velocidad en
la descompresión por memoria RAM. Puede quitar la opción si lo prefiere.
Netscape*encodingFilters: \
x-compress : : .Z : uncompress -c \n\
compress : : .Z : uncompress -c \n\
x-gzip : : .z,.gz : gzip -cdq \n\
gzip : : .z,.gz : gzip -cdq \n\
x-bzip2 : : .bz2 : bzip2 -ds \n
Estoy trabajando en un parche que debe hacer que xv auto-descomprima los
ficheros .bzip2
tal y como lo hace con los ficheros comprimidos
mediante gzip o compress. ¿Quiere ayudarme alguien?
El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.
En el INSFLUG se orienta preferentemente a la traducción de
documentos breves, como los COMOs y PUFs (Preguntas de
Uso Frecuente, las FAQs. :)
), etc.
Diríjase a la sede del INSFLUG para más información al respecto.
En la sede del INSFLUG encontrará siempre las últimas versiones de
las traducciones:
www.insflug.org
. Asegúrese de comprobar cuál es la última
versión disponible en el Insflug antes de bajar un documento de un
servidor réplica.
Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.
Francisco José Montilla,
pacopepe@insflug.org
.