COMO FAZER Bzip2
  David Fetter, dfetter@best.com <mailto:dfetter@best.com>
  v1.92, 18 de Agosto de 1998

  Este documento explica como usar o novo programa de compactação bzip2.
  A cópia local em formato sgml é denominada Bzip2-HOWTO.sgml
  <Bzip2-HOWTO.sgml> e a sua localização oficial está em
  <http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml>.
  ______________________________________________________________________

  Índice geral


  1. Introdução

     1.1 (BF
        1.1.1 v1.92
        1.1.2 v1.91
        1.1.3 v1.9
        1.1.4 v1.8
        1.1.5 v1.7
        1.1.6 v1.6
        1.1.7 v1.5
        1.1.8 v1.4
        1.1.9 v1.3
        1.1.10 v1.2
        1.1.11 v1.1
        1.1.12 v1.0

  2. Obtendo o bzip2

     2.1 COMO FAZER Bzip2 em outros idiomas
     2.2 Obtendo binários pré-compilados de bzip2
     2.3 Obtendo os fontes do bzip2
     2.4 Compilando o bzip2 em máquina local

  3. Usando o bzip2

  4. Usando o bzip2 com o tar

     4.1 Mais fácil de configurar:
     4.2 Fácil de configurar, mais fácil de usar, sem necessidade de privilégios de superusuário:
     4.3 Também fácil de usar, mas necessita de poderes de superusuário.

  5. Usando bzip2

  6. Usando o bzip2 com o emacs

     6.1 Usando o emacs:
     6.2 Mudando o emacs de forma personalizada:

  7. Usando o bzip2 com o wu-ftpd

  8. Usando o bzip2 com o grep

  9. Usando o bzip2 com o Netscape sob o X Window.

  10. Usando o bzip2 para compactar novamente outros formatos



  ______________________________________________________________________




  11..  IInnttrroodduuççããoo

  Bzip2 é um novo algoritmo para compactação de dados. Ele normalmente
  gera arquivos que são 60 a 70% do tamanho dos seus similares gerados
  pelo utilitário gzip.


  Este documento descreve algumas aplicações bem comuns do bzip2.


  Futuras  versões do documento discutirão a vindoura biblioteca bzip2,
  cujo autor  Julian Seward <mailto:Julian_Seward@muraroa.demon.co.uk> a
  descreve a seguir:


  Eu estou trabalhando na próxima versão do bzip2, que usará o mesmo formato de
  arquivo .bz2; a principal adição é uma biblioteca como zlib - para leitura e
  escrita de dados neste formato a partir dos programas.




  Versões futuras do documento podem também incluir um resumo da
  discussão acima e sobre como o bzip2 pode ser usado no kernel do
  Linux.


  11..11..  HHiissttóórriiaa ee RReevviissããoo

  11..11..11..  vv11..9922

  Seção ``Obtendo os binários do  bzip2'' atualizada, incluindo adições
  do S.u.S.E.


  11..11..22..  vv11..9911

  Corrigidos erros tipográficos e clarificados alguns detalhes sobre
  interpretadores de comandos da seção ``sobre o uso de bzip2 com tar''.
  Agradecimentos a Alessandro Rubini.


  Atualizada a ferramenta  buzzit para não danificar o arquivo original
  bzip2.


  Adicionada bgrep, uma ferramenta similar a zgrep.


  11..11..33..  vv11..99

  Corrigido o problema com gcc 2.7.*.  Agradecimentos a Ulrik Dickow por
  apontá-lo.


  Adicionada a maneira elegante de trabalhar com tar, segundo Leonard
  Jean-Marc.


  Adicionada Linus à a tradução sueca de kerlund.


  Corrigida a seção wu-ftpd por sugestão de Arnaud Launay.



  Traduções movidas para seções próprias.


  11..11..44..  vv11..88

  Colocado buzzit e tar.diff no sgml. Corrigida pontuação e formatação.
  Agradecimentos a Arnaud Launay pela sua ajuda corrigindo a cópia. :-)


  Projeto xv ignorado por enquanto, devido à falta de interesse popular.


  Adicionadas tarefas difíceis para futuras versões do documento.


  11..11..55..  vv11..77

  Adicionado utilitário buzzit.  Corrigido a atualização do gnu tar.


  11..11..66..  vv11..66

  Adicionado TenThumbs da  Netscape.


  Também mudado o lesspipe.sh por sugestões.


  11..11..77..  vv11..55

  Adicionada tradução francesa de Arnaud Launay e seu arquivo wu-ftpd.


  11..11..88..  vv11..44

  Adicionada tradução japonesa de Tetsu Isaji.


  11..11..99..  vv11..33

  Adicionado .emacs de Ulrik Dickow.


  11..11..1100..  vv11..22

  Alterada a atualização para emacs, onde ele então passa a reconhecer
  os arquivos.bz2 automaticamente.


  11..11..1111..  vv11..11

  Adicionada alteração para emacs.


  11..11..1122..  vv11..00

  1º Round.



  22..  OObbtteennddoo oo bbzziipp22

  A página do Bzip2 está localizada em The UK home site
  <http://www.muraroa.demon.co.uk/>, o site espelho nos Estados Unidos
  está em  <http://www.digistar.com/bzip2/index.html> e o programa
  também pode ser encontrado no site ftp da Red Hat
  <ftp://ftp.redhat.com/pub/contrib>.


  22..11..  CCOOMMOO FFAAZZEERR BBzziipp22 eemm oouuttrrooss iiddiioommaass

  Pessoas que falam francês podem se referir aos documentos franceses de
  Arnaud Launay. A versão web está localizada em
  <http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html> e pode ser usado o
  ftp <ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz>.
  Arnaud pode ser contatado pelo correio eletrônico em: zoro@mygale.org
  <mailto:zoro@mygale.org>.


  Pessoas que falem japonês podem utilizar os documentos japoneses de
  Tetsu Isaji <http://jf.gee.kyoto-u.ac.jp/JF/JF.html>.  Isaji pode ser
  encontrado em   <http://www2s.biglobe.ne.jp/~kaien/>, ou pelo correio
  eletrônico isaji@mxu.meshnet.or.jp <mailto:isaji@mxu.meshnet.or.jp>.


  Pessoas que falem sueco podem querer se referir aos documentos suecos
  de Linus à de kerlund
  <http://user.tninet.se/~uxm165t/linux_doc.html>.  Linus pode ser
  encontrado pelo correio eletrônico uxm165t@tninet.se
  <mailto:uxm165t@tninet.se>.


  22..22..  OObbtteennddoo bbiinnáárriiooss pprréé--ccoommppiillaaddooss ddee bbzziipp22

  Os binários podem ser obtidos nos seguintes sites:

  Binários Intel do Debian estão em
  <ftp://ftp.debian.org/debian/dists/stable/main/binary-
  i386/utils/bzip2_0.1pl2-5.deb>.

  Binários Alfa da Red Hat estão em
  <ftp://ftp.redhat.com/pub/redhat/redhat-5.1/alpha/RedHat/RPMS/bzip2-0.1pl2-1.alpha.rpm>.


  Binários Intel da Red Hat estão em
  <ftp://ftp.redhat.com/pub/redhat/redhat-5.1/i386/RedHat/RPMS/bzip2-0.1pl2-1.i386.rpm>.

  Binários SPARC da Red Hat estão em
  <ftp://ftp.redhat.com/pub/redhat/redhat-5.1/sparc/RedHat/RPMS/bzip2-0.1pl2-1.sparc.rpm>.


  Binários Intel da Slackware estão em
  <ftp://www.cdrom.com/pub/linux/slackware-3.5/slackware/a1/bzip2.tgz>.


  Binários Intel da S.u.S.E. estão em   <ftp://ftp.suse.com/pub/SuSE-
  Linux/5.2/suse/ap1/bzip.rpm>.

  Eles podem ser obtidos ainda em caminhos análogos nos diversos sites
  espelho.


  22..33..  OObbtteennddoo ooss ffoonntteess ddoo bbzziipp22

  Eles são provenientes de sites Oficiais (veja ``Obtendo Bzip2'') ou do
  site do Red Hat em
  <ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm>.





  22..44..  CCoommppiillaannddoo oo bbzziipp22 eemm mmááqquuiinnaa llooccaall

  DDeevvee--ssee tteerr oo ggcccc 22..77..** e se alterar a linha que descreve


       CFLAGS = -O3 -fomit-frame-pointer -funroll-loops




  para


       CFLAGS = -O2 -fomit-frame-pointer




  ou seja, deve ser substituído -O3 por -O2 e  retirar o parâmetro
  -funroll-loops.  Pode-se ainda adicionar quaisquer parâmetros -m*
  (como -m486, por exemplo) quando se estiver compilando o kernel.

  Evitar o parâmetro -funroll-loops é a parte mais importante, uma vez
  que isto pode fazer com que muitos compiladores gcc gerem códigos
  errados com códigos lentos e grandes. Para outros compiladores (lcc,
  egcs, gcc 2.8.x) o padrão CFLAGS é suficiente.

  Após isto, basta executar make -o e instalar o programa conforme o
  descrito no arquivo README.


  33..  UUssaannddoo oo bbzziipp22

  O uso do bzip2 deve ser iniciado por uma atenta leitura da página de
  manual. :)

  44..  UUssaannddoo oo bbzziipp22 ccoomm oo ttaarr

  A seguir apresentamos três maneiras de usar o bzip2 com o tar.


  44..11..  MMaaiiss ffáácciill ddee ccoonnffiigguurraarr::

  Este método não requer configuração. Para descompactar um arquivo
  gerado pelo bzip2 e o tar, chamado foo.tar.bz2, presente no diretório
  atual, deve-se executar o comando:



       /path/to/bzip2 -cd foo.tar.bz2 | tar xf -





  Isto funciona, mas pode ser intediante digitá-lo freqüentemente. Pode-
  se usar então os esquemas descritos a seguir.


  44..22..  FFáácciill ddee ccoonnffiigguurraarr,, mmaaiiss ffáácciill ddee uussaarr,, sseemm nneecceessssiiddaaddee ddee
  pprriivviillééggiiooss ddee ssuuppeerruussuuáárriioo::

  Agradecimentos a Leonard Jean-Marc
  <mailto:leonard@sct1.is.belgacom.be> pela dica.  Agradecimentos também
  para Alessandro Rubini <mailto:rubini@morgana.systemy.it> pelas dicas
  de diferenciação entre o bash e outros interpretadores de comando csh.
  No .bashrc, deve-se adicionar a seguinte linha:



       alias btar='tar --use-compress-program /usr/local/bin/bzip2 '





  No .tcshrc ou .cshrc, a linha análoga tem o seguinte formato:



       alias btar 'tar --use-compress-program /usr/local/bin/bzip2'





  44..33..  TTaammbbéémm ffáácciill ddee uussaarr,, mmaass nneecceessssiittaa ddee ppooddeerreess ddee ssuuppeerruussuuáárriioo..

  Deve-se aplicar a atualização a seguir no gnu tar 1.12:



       cd tar-1.12/src; patch < /path/to/tar.diff




  A seguir ele deve ser compilado e instalado. Certifique-se que  tanto
  o tar como bzip2 estão no $PATH através dos comandos "which tar" e
  "which bzip2."

  Para usar-se o novo comando tar, basta executar o seguinte:


        tar xyf foo.tar.bz2




  para descompactar o arquivo.


  Para criar um novo arquivo compactado deve-se executar:


        tar cyf foo.tar.bz2 arquivo1 arquivo2 arquivo3...diretório1 diretório2...






  Aqui está a atualização:









  *** tar.c       Thu Jun 11 00:09:23 1998
  --- tar.c.new   Thu Jun 11 00:14:24 1998
  ***************
  *** 196,201 ****
  --- 196,203 ----
      {"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, _option, 1},
      {"compare", no_argument, NULL, 'd'},
  ***************
  *** 372,377 ****
  --- 374,380 ----
                  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)
  --- 451,457 ----
       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 ****
  --- 808,817 ----
          case 'X':
          exclude_option = 1;
          add_exclude_file (optarg);
  +       break;
  +
  +       case 'y':
  +       set_use_compress_program_option ("bzip2");
          break;

          case 'z':



  55..  UUssaannddoo bbzziipp22

  Para descompactar arquivos gerados pelo bzip2 durante a execução, por
  exemplo com o uso do comando "less" ou com o bunzip2, pode-se executar
  o lesspipe.sh (man less) da seguinte forma:





  #!/bin/sh
  # Este é um pré-processador de 'less'. Ele é usado através da variável
  # de ambiente:   LESSOPEN="|lesspipe.sh %s"

    case "$1" in
    *.tar) tar tvvf $1 2>/dev/null ;; # Verifica o conteúdo dos arquivos tar
    *.tgz) tar tzvvf $1 2>/dev/null ;;
  # isso funciona para versões não modificadas do tar:
    *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
  # este funciona com versões atualizadas do 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 ;; # verifica os arquivos comprimidos
    *.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
      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` ; # verifica se o arquivo é um binário
  #    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





  66..  UUssaannddoo oo bbzziipp22 ccoomm oo eemmaaccss

  66..11..  UUssaannddoo oo eemmaaccss::

  Havia sido escrita a seguinte atualização para jka-compr.el que
  adiciona o bzip2 no modo de compactação automática.

  Isso só foi testado com emacs-20.2, porém tenho razões para acreditar
  que um funcionamento similar ocorrerá com outras versões.


  Para usá-lo neste formato deve-se seguir os seguintes passos:


  1. Ir para o diretório de fontes emacs-20.2/lisp  (ou onde quer que
     ele tenha sido descompactado com tar);

  2. Colocar a atualização abaixo em um arquivo chamado jka-
     compr.el.diff (o arquivo não deve ter outro conteúdo);

  3. Executar



       patch < jka-compr.el.diff



  4. Iniciar o emacs, e executar


        M-x byte-compile-file jka-compr.el





  5. Fechar o emacs;

  6. Mover o arquivo jka-compr.elc original para um lugar seguro e

  7. Substituir o arquivo pelo novo jka-compr.elc.

  8. Divirta-se!


     --- 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 @@
      ;; A variável jka-compr-compression-info-list pode ser usada para
      ;; adaptar jka-compr para trabalhar com outros programas compactados.
      ;; O valor padrão desta variável permite que jka-compr trabalhe com
     -;; Unix compactado e gzip. David Fetter adicionou suporte bzip2 :)
      ;;
      ;; Se você está preocupado com a saída stderr de gzip e outros programas de
      ;; compactação/descompactação mostrados nos buffers (área de memória)
      @@ -121,7 +121,9 @@


      ;;; Eu tenho isto definido então aqueles arquivos .Z são presumidos para unix
     -;;; formato compactado; e arquivos .gz, no formato gzip.
     +;;; formato compactado; e arquivos .gz, em formato gzip, e arquivos .bz2,
     +;;; no novo formato bzip2 do http://www.muraroa.demon.co.uk.
     +;;; Continue o bom trabalho, gente!
      (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")




  66..22..  MMuuddaannddoo oo eemmaaccss ddee ffoorrmmaa ppeerrssoonnaalliizzaaddaa::

  Agradecimentos para Ulrik Dickow, ukd@kampsax.dk
  <mailto:ukdATkampsax.dk>, Programador de sistemas na Kampsax
  Technology.

  Para poder usar o bzip2 automaticamente quando você não é o
  administrador do sistema (sysadmin), basta adicionar o seguinte no
  arquivo .emacs:.



  ;; (Des)compactação automática nos arquivos  carregar/guardar (gzip(1))
  ;; Nós iniciamos ele no estado desligado, então este suporta bzip2(1)
  ;; Códigos lançados juntos pelo Ulrik Dickow para ~/.emacs com Emacs 19.34.
  ;; Devem funcionar com antigos e novos Emacs também. Embora sem garantia.
  ;;
  (if (fboundp 'auto-compression-mode) ; Emacs 19.30+
      (auto-compression-mode 0)
    (require 'jka-compr)
    (toggle-auto-compression 0))
  ;; Adicione agora suporte bzip2 e volte auto compactação.
  (add-to-list 'jka-compr-compression-info-list
               ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
                "zipping"        "bzip2"         ()
                "unzipping"      "bzip2"         ("-d")
                nil t])
  (toggle-auto-compression 1 t)




  77..  UUssaannddoo oo bbzziipp22 ccoomm oo wwuu--ffttppdd

  Agradecimentos a Arnaud Launay por este economizador de banda. O que
  se segue deve estar em /etc/ftpconversions para a realização de
  compactações automáticas. Assegure-se que os caminhos (como
  /bin/compress) estão corretos.


   :.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 -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2




  88..  UUssaannddoo oo bbzziipp22 ccoomm oo ggrreepp

  O utilitário seguinte, que eu chamo de bgrep, é uma modificação leve
  do zgrep que vem com o Linux. Pode ser usado para pesquisas através de
  arquivos não compactados pelo bunzip2.



















  #!/bin/sh

  # bgrep - um invólucro do programa grep que descompacta arquivos se necessário
  PATH="/usr/bin:$PATH"; export PATH

  prog=`echo $0 | sed 's|.*/||'`
  case "$prog" in
          *egrep) grep=${EGREP-egrep}     ;;
          *fgrep) grep=${FGREP-fgrep}     ;;
          *)      grep=${GREP-grep}       ;;
  esac
  pat=""
  while test $# -ne 0; do
    case "$1" in
    -e | -f) opt="$opt $1"; shift; pat="$1"
             if test "$grep" = grep; then  # grep tem problemas com -e em SVR4
               grep=egrep
             fi;;
    -*)      opt="$opt $1";;
     *)      if test -z "$pat"; then
               pat="$1"
             else
               break;
             fi;;
    esac
    shift
  done

  if test -z "$pat"; then
    echo "pesquisa através de arquivos compactados pelo bzip2"
    echo "uso: $prog [opções do grep] padrão [arquivos]"
    exit 1
  fi

  list=0
  silent=0
  op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
  case "$op" in
    *l*) list=1
  esac
  case "$op" in
    *h*) silent=1
  esac

  if test $# -eq 0; then
    bzip2 -cd | $grep $opt "$pat"
    exit $?
  fi

  res=0
  for i do
    if test $list -eq 1; then
      bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i
      r=$?
    elif test $# -eq 1 -o $silent -eq 1; then
      bzip2 -cd "$i" | $grep $opt "$pat"
      r=$?
    else
      bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
      r=$?
    fi
    test "$r" -ne 0 && res="$r"
  done
  exit $res


  99..  UUssaannddoo oo bbzziipp22 ccoomm oo NNeettssccaappee ssoobb oo XX WWiinnddooww..

  tenthumbs@cybernex.net diz:

       Eu encontrei uma maneira de conseguir com que o Netscape do Linux use
       o bzip2 em Content-Encoding do mesmo modo que ele usa gzip. Deve ser
       adicionada no $HOME/.Xdefaults ou no $HOME/.Xresources o conteúdo a
       seguir.

       Eu uso a opção -s por preferir trocar velocidades de descompactação
       por uso de RAM. Esta opção não necessita ser utilizada.



  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




  1100..  UUssaannddoo oo bbzziipp22 ppaarraa ccoommppaaccttaarr nnoovvaammeennttee oouuttrrooss ffoorrmmaattooss

  O seguinte programa em perl recebe arquivos compactados em outros
  formatos (.tar.gz, .tgz. .tar.Z e .Z) e os empacota para uma melhor
  compactação. O fonte em Perl está documentado.





































  #!/usr/bin/perl -w

  ########################################################
  #                                                      #
  # Este programa recebe programas compactados e gzipados#
  # no diretório atual e transforma-os no formato bzip2. #
  # Ele maneja a extensão .tgz de uma forma razoável,    #
  # produzindo um arquivo .tar.bz2.                      #
  ########################################################
  $counter = 0;
  $saved_bytes = 0;
  $totals_file = '/tmp/machine_bzip2_total';
  $machine_bzip2_total = 0;

  while(<*[Zz]>) {
      next if /^bzip2-0.1pl2.tar.gz$/;
      push @files, $_;
  }
  $total = scalar(@files);

  foreach (@files) {
      if (/tgz$/) {
          ($new=$_) =~ s/tgz$/tar.bz2/;
      } else {
          ($new=$_) =~ s/\.g?z$/.bz2/i;
      }
      $orig_size = (stat $_)[7];
      ++$counter;
      print "Reempacotando $_ ($counter/$total)...\n";
      if ((system "gzip -cd $_ |bzip2 >$new") == 0) {
          $new_size = (stat $new)[7];
          $factor = int(100*$new_size/$orig_size+.5);
          $saved_bytes += $orig_size-$new_size;
          print "$new é $factor% do tamanho de $_. :",($factor<100)?')':'(',"\n";
          unlink $_;
      } else {
          print "Algo aconteceu com $_: $!\n";
      }
  }
  print "Foram economizados ",
        ($saved_bytes>=0)?"economizados":"perdidos",
        " $saved_bytes bytes de espaço de armazenamento :",
         ($saved_bytes>=0)?")":"(", "\n";

  unless (-e '/tmp/machine_bzip2_total') {
      system ('echo "0" >/tmp/machine_bzip2_total');
      system ('chmod', '0666', '/tmp/machine_bzip2_total');
  }


  chomp($machine_bzip2_total = `cat $totals_file`);
  open TOTAL, ">$totals_file"
       or die "Não foi possível abrir o arquivo: $!";
  $machine_bzip2_total += $saved_bytes;
  print TOTAL $machine_bzip2_total;
  close TOTAL;

  print "Total de ",`cat $totals_file`," bytes economizados.\n";