Compacte arquivos usando os recursos do bzip2

O bzip2 comprime arquivos através do algoritmo de Burrows-Wheeler.
O nível de compressão por este método é consideravelmente mais eficiente do que o de softwares baseados no LZ77/LZ78 (LZW).
Por outro lado, não chega a ser tão bom quanto a família de compressores estatísticos PPM.

O pacote de utilitários bzip2 é composto pelos seguintes itens:

  1. bzip2, bunzip2 — respectivamente, ferramentas de compactação e descompactação de arquivos.
  2. bzcat — descomprime arquivos para o stdout, ou seja, exibe o conteúdo.
  3. bzip2recover — ferramenta de recuperação e correção de arquivos bzip2 danificados.

É comum usar o programa em conjunto com o comando tar.
O tar não é, exatamente, uma ferramenta de compressão e depende de aplicativos de terceiros para fazer este trabalho.
Por outro lado, o bzip2 não é um arquivador. Ele comprime os arquivos individualmente.
Por ĩsto, é tão comum combinar os dois utilitários.
Para fazer o arquivamento (backup) de diretórios, usando o tar, com compressão pelo bzip2, use-o assim:


tar cjf backup.tar.bz ~/temp/

Se quiser, use o progress, como ferramenta para acompanhar o andamento do processo de backup tar/bzip2, com resultados individuais exibidos para cada processo.

progress tar bzip2

O bzip2 faz parte do conjunto de ferramentas padrão das grandes distribuições GNU/Linux. Você provavelmente não precisará se preocupar em instalar, portanto. Tudo que precisa para começar a usar agora, já se encontra no seu sistema.

Como usar o bzip2 na CLI

Na linha de comando (CLI), o bzip2 tem uma sintaxe similar ao do gzip, o que pode tornar mais fácil o trabalho de substituição em scripts de backup.
O utilitário espera que lhe seja dado uma lista de arquivos, acompanhados das opções de uso.
Cada arquivo é substituído por uma versão comprimida de si mesmo — acrescida da extensão .bz2.
Cada arquivo comprimido mantém (enquanto possível) as propriedades originais de posse, facilitando sua restauração posterior.
Se você prefere que os arquivos existentes sejam sobrescritos, é necessário usar o parâmetro ‘-f’. Sem isso, o programa pula arquivos que já tenham passado pelo processo de compactação.


bzip2 -f Occidentalis_v02.img

Exemplos de uso do bzip2

Adapte os exemplos, a seguir, às suas necessidades.
Para dar opções rápidas, o utilitário permite definir --fast (mais rápido) ou --best (melhor compressão),
Portanto para obter a melhor compressão possível, use o bzip2 assim:


bzip2 --best nome-do-arquivo

Para obter uma compressão mais rápida:


bzip2 --fast nome-do-arquivo

A qualidade da compressão também pode ser definida numericamente (de 1 a 9).
A opção ‘-9’ equivale a --best e ‘-1’ a --fast.
Para obter um nível de compressão equilibrado, use -5:


bzip2 -5 nome-do-arquivo

Para obter um feedback mais verboso, use ‘-v’ ou --verbose:


bzip2 -v *.* 

O comando, acima, irá comprimir todos os arquivos do diretório corrente, gerando um novo arquivo com extensão .bz2 em substituição para cada um.
Este é o comportamento padrão do programa.
A opção ‘-v’ serve para mostrar o que está sendo feito.

Sim! Você pode combinar várias opções.
Abaixo, ativei a ‘verbosidade’ e especifiquei que não quero que o arquivo original seja removido. Veja o meu resultado:


bzip2 -vk woman-drinking-cup-of-coffee.jpg 

woman-drinking-cup-of-coffee.jpg:  0.991:1,  8.072 bits/byte, -0.90% saved, 36856 in, 37189 out.

ls -lah woman-drinking-cup-of-coffee.*

-rw-r--r-- 1 justincase justincase 36K set  1 15:03 woman-drinking-cup-of-coffee.jpg
-rw-r--r-- 1 justincase justincase 37K set  1 15:03 woman-drinking-cup-of-coffee.jpg.bz2

Desta vez restaram 2 arquivos — com extensões ‘.jpg’ e ‘.jpg.bz2’.
Note que o arquivo resultante ficou 1K maior do que o original.
Isto se deve ao fato de que arquivos JPEG já são comprimidos.
Neste caso, além de não ter sido possível obter uma taxa de compressão maior, somou-se ao arquivo resultante as informações do bzip2.
Por isto ele ficou maior.
Você irá obter resultados bem melhores sobre arquivos de texto ou de áudio FLAC, por exemplo.

Como descompactar e testar meus arquivos bz2

Para descomprimir (inflar) seus arquivos, use o bunzip2 ou ‘bzip2 -d’:


bzip2 -dv woman-drinking-cup-of-coffee.jpg.bz2

bzip2: Output file woman-drinking-cup-of-coffee.jpg already exists.

Como o arquivo original ‘woman-drinking-cup-of-coffee.jpg’ já existia, obtive a mensagem acima ‘Output file woman-drinking-cup-of-coffee.jpg already exists‘ — “O arquivo de saída … já existe”.
Se quiser forçar a extração, neste caso, use ‘-f’:


bzip2 -dvf woman-drinking-cup-of-coffee.jpg.bz2

Use ‘-tv’ para testar um ou vários arquivos bz2:


bzip2 -tv woman-drinking-cup-of-coffee.jpg.bz2 

woman-drinking-cup-of-coffee.jpg.bz2: ok

Mais adiante, vamos abordar novamente o uso de ‘-t’.

Como usar o bzip2, quando os recursos do sistema estão escassos

Em ambiente servidor pode ser difícil encontrar “uma folga” no tempo do processador ou no espaço disponível na memória RAM do sistema.
Ficar sem backup, justamente nestes casos, não é uma opção.
Aplicar o --small ou ‘-s’ faz com que o aplicativo realize o seu trabalho com menor consumo de memória.
Segue um exemplo de uso:


bzip2 -sv Screenshot_20170*

  Screenshot_20170619-092621.png:  1.005:1,  7.963 bits/byte,  0.47% saved, 2090633 in, 2080882 out.
  Screenshot_20170619-092626.png:  1.000:1,  7.997 bits/byte,  0.04% saved, 2199528 in, 2198582 out.
  Screenshot_20170619-092823.png:  1.137:1,  7.036 bits/byte, 12.05% saved, 156600 in, 137732 out.

...

  Screenshot_20170706-164342.png:  1.134:1,  7.053 bits/byte, 11.84% saved, 128326 in, 113135 out.
  Screenshot_20170706-164407.png:  1.097:1,  7.292 bits/byte,  8.85% saved, 120458 in, 109795 out.
  Screenshot_20170706-164419.png:  1.141:1,  7.014 bits/byte, 12.33% saved, 97195 in, 85210 out.

A opção reduz o uso da memória durante a compressão, descompressão e teste.
Neste caso, é ativado um outro algoritmo, que requer 2,5 bytes por cada byte de bloco.
Com isto, qualquer arquivo pode ser inflado dentro de um espaço de 2300 kb, na memória RAM.
O custo: redução pela metade da velocidade de trabalho do aplicativo.
Durante o processo de descompressão, o ‘-s’ seleciona blocos de 200 kb, limitando o uso de memória ao mesmo valor — com a consequente redução da taxa de compressão.

A documentação manda usar ‘-s’ em sistemas com 8 Mb de memória RAM livres ou menos.
Mas você pode usar o recurso em outras situações que julgar adequado.

Como recuperar arquivos bzip2 danificados

Acidentes podem ocorrer durante uma transferência e você pode acabar com arquivos compactados importantes corrompidos.
O bzip2 comprime em blocos, usualmente, com 900 Kb — cada qual é manipulado independentemente pelo utilitário.
Se uma mídia danificada ou um erro de transmissão causar dano a um ou mais blocos, ainda é possível recuperar o conteúdo a partir dos dados armazenados nos blocos saudáveis.

O bzip2recover é um programa simples com o propósito de varrer blocos dentro de arquivos .bz2 e gravar cada bloco em outro arquivo .bz2.
Os arquivos resultantes podem ser verificados com a opção ‘-t’ e, se for o caso, descomprimidos.
Veja um exemplo:


bzip2recover woman-drinking-cup-of-coffee.jpg.bz2 

bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.
bzip2recover: searching for block boundaries ...
   block 1 runs from 80 to 297425
bzip2recover: splitting into blocks
   writing block 1 to `rec00001woman-drinking-cup-of-coffee.jpg.bz2' ...
bzip2recover: finished

Em seguida, rode o teste:


bzip2 -tv rec00001woman-drinking-cup-of-coffee.jpg.bz2 

  rec00001woman-drinking-cup-of-coffee.jpg.bz2: ok

Este é o procedimento básico de recuperação pelo bzip2 de um arquivo danificado.

Compactação com criptografia

Segurança implica em criptografia, em muitos casos.
O bzip2 pode ser usado em conjunto com a ferramenta de criptografia GnuPG.
Para obter este resultado, você pode invocar a compressão com o bzip2 do próprio gpg:


gpg --output ssp2.html.gpg.bz2 --bzip2-compress-level 1 -cv ssp2.html

gpg: pinentry launched (11802 gnome3 1.0.0 ? ? ?)
gpg: pinentry launched (11809 gnome3 1.0.0 ? ? ?)
gpg: using cipher AES
gpg: writing to 'ssp2.html.gpg.bz2'

Veja o que foi feito:

  • gpg --output ssp2.html.gpg.bz2 — a execução pede para gerar um arquivo de saída, criptografado, com o nome ‘ssp2.html.gpg.bz2’.
  • --bzip2-compress-level 1 — especifica o método e o nível de compressão a ser usado.
  • -cv — indica explicitamente a criptografia (-c) e verbosidade (-v).

O valor de --bzip2-compress-level pode variar de 0 (nenhuma compressão) a 9 (máxima compressão).
Acima, usei o valor 1, para tornar o procedimento mais célere.
Para reverter, use o gpg assim:


gpg --output ssp2.html -dv --bzip2-decompress-lowmem ssp.html.gpg.bz2

gpg: AES encrypted data
gpg: pinentry launched (11769 gnome3 1.0.0 ? ? ?)
gpg: encrypted with 1 passphrase
gpg: original file name='ssp.html'

O que há de diferente?
Desta vez, usamos a opção ‘-d’ e --bzip2-decompress-lowmem para indicar que é para descomprimir um arquivo, com o uso do bzip2.

Como comprimir e descomprimir arquivos com o comando zip no Linux

Há inúmeras maneiras para fazer a compressão e a extração de arquivos no Linux. Muitas delas, pela interface gráfica — outras, no emulador de terminal.
Neste artigo, vou mostrar, através de exemplos práticos, como compactar, organizar e descompactar arquivos no formato .zip, usando o aplicativo padrão do Linux, zip — fazendo uso da linha de comando.
Ao final, vamos discutir alguns métodos de criptografia, segurança e prevenção contra crackers/hackers para dar mais segurança aos seus arquivos.
Como há vários exemplos, baseados em várias possibilidades, recomendo guardar este texto nos seus favoritos (Ctrl + D), para poder encontrar rapidamente esta referência, quando precisar.

O zip é um utilitário de empacotamento e compressão multiplataforma, que tem versões para Unix, VMS, MSDOS, OS/2, todas as versões do Windows, Minix, Atari, Macintosh, Amiga, Acorn RISC, GNU/LINUX etc.

O aplicativo é análogo à combinação dos comandos tar e compress e é compatível com o (historicamente conhecido) PKZIP, criado por Phil Katz para sistemas MSDOS, nos anos 80.
Entre as várias aplicações possíveis para o programa, citam-se sua inclusão em scripts de backup, que criam cópias de segurança, armazenam e transmitem o pacote compactado para outra mídia ou endereço na rede.
Se você tem um espaço limitado, como um DVD (4,3 GiB), é possível gravar uma quantidade muito superior de dados compactados — isto depende do tipo de arquivo envolvido.

O zip é útil para empacotar conjuntos de arquivos que você deseja distribuir juntos (Por exemplo, um programa, com suas bibliotecas e arquivos de configuração), para fazer backup, para armazenar arquivos ou diretórios que você não usa mais (ou não usa muito) em um espaço menor no disco.

A taxa de compressão máxima varia muito entre os diversos tipos de arquivos. Mas alguns autores concordam que 95% é uma média razoável — ou seja, é possível, com alguma sorte, armazenar aproximadamente 40 GiB dentro de um DVD.
Leve em conta sempre que, arquivos multimídia, como MP3, MP4, OGG, OGV, 3GP etc., já passaram por processos de compactação. Portanto, não espere resultados muito expressivos ao armazenar estes arquivos.
zipped-files-deep-purple

Como compactar uma pasta de arquivos inteira

Supondo uma série de arquivos .mp3 dentro de uma pasta ou diretório do sistema, veja este exemplo de como “empacotar” a pasta para dentro de um único arquivo compactado:

ls deep_purple/

Deep Purple - Fireball - 01 - Fireball.mp3
Deep Purple - Fireball - 02 - No No No.mp3
Deep Purple - Fireball - 03 - Demon´s Eye.mp3
Deep Purple - Fireball - 04 - Anyone´s Daughter.mp3
Deep Purple - Fireball - 05 - The Mule.mp3
Deep Purple - Fireball - 06 - Fools.mp3
Deep Purple - Fireball - 07 - No One Came.mp3
Deep_Purple_-_Fireball-back.jpg
Deep_Purple_-_Fireball-cd.jpg
Deep_Purple_-_Fireball-front.jpg

Para compactar a pasta deep_purple, use o comando zip da seguinte forma:

zip deeppurple deep_purple/*
  adding: deep_purple/Deep Purple - Fireball - 01 - Fireball.mp3 (deflated 0%)
  adding: deep_purple/Deep Purple - Fireball - 02 - No No No.mp3 (deflated 0%)
  adding: deep_purple/Deep Purple - Fireball - 03 - Demon´s Eye.mp3 (deflated 0%)
  adding: deep_purple/Deep Purple - Fireball - 04 - Anyone´s Daughter.mp3 (deflated 1%)
  adding: deep_purple/Deep Purple - Fireball - 05 - The Mule.mp3 (deflated 0%)
  adding: deep_purple/Deep Purple - Fireball - 06 - Fools.mp3 (deflated 0%)
  adding: deep_purple/Deep Purple - Fireball - 07 - No One Came.mp3 (deflated 0%)
  adding: deep_purple/Deep_Purple_-_Fireball-back.jpg (deflated 0%)
  adding: deep_purple/Deep_Purple_-_Fireball_cd.jpg (deflated 0%)
  adding: deep_purple/Deep_Purple_-_Fireball-front.jpg (deflated 1%)

Note que o arquivo deeppurple.zip já foi criado, com o sufixo ‘zip’:

ls -lh *.zip
-rw-r--r-- 1 justincase justincase 74M Ago 17 17:03 deeppurple.zip

Como armazenar arquivos ocultos

O comando anterior, compacta todos os arquivos dentro do diretório especificado. Mas não inclui os arquivos ocultos no diretório.
O diretório /home dos usuários contem vários arquivos e pastas ocultos. Muitos deles, são arquivos de configuração.
Suponha que alguém queira armazenar tudo em um flash drive (pendrive) USB para fins de backup ou para levar para outro computador.
Para ver os arquivos ocultos em seu diretório /home, use o seguinte comando:

cd
ls -la

Os arquivos ocultos são aqueles que iniciam com um ‘.’ (ponto).
Se você deseja incluir no seu arquivo compactado todos os arquivos da pasta /home (incluindo os arquivos ocultos), use o comando assim:

cd
zip home_backup * .*
_

Note que há um espaço entre ‘*’ e ‘.*’.
Esta solução não vai incluir os subdiretórios. Para isto, é necessário incluir a opção ‘-r’ (de recursividade):

zip -r home_backup .
_

Como adicionar arquivos a um pacote zip

Para adicionar novos arquivos, basta citá-los para adicioná-los ao pacote preexistente.
No exemplo, abaixo, é usada a recursividade, para incluir o conteúdo dos subdiretórios:

zip -r deeppurple.zip ~/music/ACDC/

O procedimento padrão do zip é adicionar os novos arquivos a um pacote preexistente. Além disto, ele verifica se os arquivos repetidos são mais novos do que os que já existem e, se for este o caso, sobrescreve os antigos, deixando o pacote atualizado.

Como atualizar arquivos dentro de um pacote zip

Em vez de criar um novo arquivo ou “enfiar” os arquivos de novo para dentro de um pacote já existente, que tal apenas atualizar os arquivos que sofreram alguma alteração?
A opção ‘-u’ (update) faz uma atualização do pacote, zipando apenas os itens que tenham sido alterados ou criados desde a última compactação.
A opção ‘-f’ faz a mesma coisa, só que não inclui novos arquivos.
Veja um exemplo:

zip -ur deeppurple.zip ~/music/ACDC/

Como listar os arquivos contidos ou ver informações sobre um pacote zip

Basicamente, há duas boas formas de listar os arquivos contidos em um pacote zip.
Você pode usar o utilitário unzip para apenas dar uma olhada no conteúdo do pacote.
Se a quantidade de arquivos for muito grande, combine-o com o comando less, da seguinte forma:

unzip -l home_backup.zip | less

Archive:  home_backup.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    23697  2015-02-23 16:50   home/justincase/14.10.3
   133850  2015-06-02 19:59   home/justincase/1977_Death Of A Ladies Man.png
  7828773  2015-06-02 19:59   home/justincase/Alexandra Leaving.MP3
      197  2015-05-14 19:45   home/justincase/alter.sql
      200  2014-09-20 12:34   home/justincase/Boleto.html.zip.xml
  8762376  2015-06-02 19:59   home/justincase/Boogie Street.MP3
:

ou você pode usar apenas o comando less, para obter informações sobre o conteúdo do pacote zip:

less deeppurple.zip | less

Archive:  deeppurple.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
 6460104  Defl:N  6436345   0% 2015-08-17 17:02 304d865a  deep_purple/Deep Purple - Fireball - 01 - Fireball.mp3
13093116  Defl:N 13048773   0% 2015-08-17 17:02 9ee3fbb1  deep_purple/Deep Purple - Fireball - 02 - No No No.mp3
10093841  Defl:N 10045979   1% 2015-08-17 17:02 4b64f2fe  deep_purple/Deep Purple - Fireball - 03 - Demon´s Eye.mp3
 9166807  Defl:N  9099519   1% 2015-08-17 17:02 fe325f88  deep_purple/Deep Purple - Fireball - 04 - Anyone´s Daughter.mp3
10139816  Defl:N 10102938   0% 2015-08-17 17:02 00f38b4f  deep_purple/Deep Purple - Fireball - 05 - The Mule.mp3
15725423  Defl:N 15650648   1% 2015-08-17 17:02 3e00bcea  deep_purple/Deep Purple - Fireball - 06 - Fools.mp3
12167754  Defl:N 12119760   0% 2015-08-17 17:02 ccafa0ae  deep_purple/Deep Purple - Fireball - 07 - No One Came.mp3
  186339  Defl:N   185741   0% 2015-08-17 17:02 fee2ec5c  deep_purple/Deep_Purple_-_Fireball-back.jpg
  131164  Defl:N   131036   0% 2015-08-17 17:02 2e5d90a0  deep_purple/Deep_Purple_-_Fireball-cd.jpg
  109795  Defl:N   109165   1% 2015-08-17 17:02 bbf86a4f  deep_purple/Deep_Purple_-_Fireball-front.jpg
:

Como você pode perceber, acima, o comando mostra uma série de informações, além dos nomes dos arquivos empacotados.
Usuários mais avançados podem obter informações detalhadas sobre a situação de seus arquivos dentro de um pacote zip, com o utilitário zipdetails.
Veja como:

zipdetails deeppurple.zip | less

O aplicativo zipdetails, desenvolvido por Paul Marquess, exibe as informações da estrutura interna do pacote zip, em 3 colunas.

  • A primeira coluna expõe o offset a partir do começo do arquivo em hex
  • A segunda contém uma descrição textual do campo
  • Informações sobre os nomes dos arquivos, data de criação/empacotamento, taxa de compressão etc. podem ser observadas na terceira coluna

zipdetails-screen-capture-001

Como verificar a integridade de um arquivo zip

Verificar se o seu backup é íntegro e poderá ser restaurado posteriormente, em caso de necessidade (bate 3 vezes na madeira…) é tão importante quanto a própria prática de criar cópias de segurança.
Se vocẽ está compactando pastas e arquivos que têm pouco uso, para criar espaço adicional, é interessante verificar se o pacote zip está em perfeitas condições, antes de apagar os arquivos originais.
Use a opção ‘-T’ para testar o seus pacotes zip:

zip -T deeppurple.zip

Acrescente a opção ‘-v’ para obter mais verbosidade no processo:

zip -Tv deeppurple.zip

Em caso de erro no arquivo, a mensagem exibida pode ser semelhante a
zip error: Zip file structure invalid (deeppurple_defect.zip).

Como recuperar um pacote zip defeituoso

Alguns defeitos no arquivo zip podem ser corrigidos com a opção ‘-F’ (fixing).
Indique o arquivo defeituoso e o nome do novo arquivo corrigido, a ser criado:

zip -F deeppurple-defeituoso.zip --out deeppurple-corrigido.zip

O saída do programa, durante o procedimento de recuperação é semelhante a que segue:

Fix archive (-F) - assume mostly intact archive
Zip entry offsets appear off by -2 bytes - correcting...
 copying: deep_purple/Deep Purple - Fireball - 01 - Fireball.mp3
	zip warning: reading archive fseek: Invalid argument
	zip warning: bad - skipping: deep_purple/Deep Purple - Fireball - 01 - Fireball.mp3
 copying: deep_purple/Deep Purple - Fireball - 02 - No No No.mp3
 copying: deep_purple/Deep Purple - Fireball - 03 - Demon´s Eye.mp3

 ...

O processo poderá excluir um ou mais arquivos de dentro do pacote, que possam estar irremediavelmente corrompidos.
A documentação oficial do zip informa que a opção ‘-F’ pode ser usada quando porções do arquivo, como um todo, estão faltando.
Durante o procedimento, o arquivo defeituoso é vasculhado e o zip ignora alguns problemas, copiando para dentro do novo arquivo apenas o que estiver bom.
Se você usar a opção ‘-FF’, o arquivo será sondado com mais rigor. Esta opção pode ser usada em casos de danos muito graves.
Em casos de danos leves, a opção ‘-F’ é a mais confiável.

Como excluir arquivos do empacotamento

Há casos em que se deseja fazer um backup apenas dos arquivos texto do libreOffice (ODT) ou, caso você tenha baixado os arquivos do smartphone, fazer cópia de segurança das fotos em um arquivo e dos vídeos em outro.
Para isto, é possível indicar os arquivos indesejados, para que não sejam incluídos no pacote final.
Use a opção ‘-x’ para isto:

zip minhasfotos.zip -r media/ -x *.mp4 *.3gp 

Como especificar o método e o nível de compressão a ser usado

As versões atuais do utilitário suportam 3 métodos de armazenamento:

  • store — armazenamento simples, sem qualquer compressão. Esta opção não oferece qualquer ganho em economia de espaço, mas é a mais rápida.
    Equivale a usar a opção de compressão ‘-0’.
  • deflate — este o método de armazenamento padrão do utilitário. O zip analisa os arquivos e determina quando é mais adequado deflacionar ou armazenar do jeito que está.
  • bzip2 — o método bzip permite níveis de compactação superiores. Versões mais antigas do zip não suportam este método — tenha cuidado, portanto, caso você tenha a intenção de descompactar o pacote final em uma máquina com uma versão muito antiga do aplicativo. Faça os testes antes.

Veja um exemplo de uso da compactação com bzip2:

zip -Z bzip2 deeppurple.zip deep_purple/*

O nível de compressão (ou velocidade) de compressão pode ser definido por um número, na linha de comando.
Os níveis de compressão vão de 0 a 9 — quanto mais alto o nível de compressão, menor a velocidade do processo.
O nível padrão é ‘-6’.
O nível mais baixo é ‘-0’ (compressão nenhuma).
No exemplo abaixo, é usado o método bzip2, com a taxa máxima ‘-9’:

zip -vZ bzip2 -9 deeppurple.bz deep_purple/*
_

Faça testes e comparações, para encontrar o método e a taxa ideal para você.
Note que usei, acima, a extensão .bz — só para lembrar qual foi o método usado na compactação.
Como você pode ver, abaixo, a diferença entre um método e outro é pequena, quando se trata de arquivos já compactados — como é o caso de arquivos .mp3, .jpg etc.

ls -la deeppurple.*
-rw-r--r-- 1 justincase justincase 76899389 Ago 18 15:20 deeppurple.bz
-rw-r--r-- 1 justincase justincase 76932168 Ago 18 15:19 deeppurple.zip

Como remover arquivos de dentro do pacote zip

Você pode remover arquivos que julgue desnecessários de dentro de um pacote zip, com a opção ‘-d’.
O exemplo abaixo mostra como remover todos os arquivos .jpg de dentro do arquivo deeppurple.zip:

zip deeppurple.zip -d *.jpg
deleting: deep_purple/Deep_Purple_-_Fireball-back.jpg
deleting: deep_purple/Deep_Purple_-_Fireball-cd.jpg
deleting: deep_purple/Deep_Purple_-_Fireball-front.jpg
_

Como extrair arquivos

O aplicativo unzip, que faz parte do pacote do produto, é usado para reverter o processo de compactação.
O unzip também pode ser usado para testar e listar o conteúdo do pacote zip.
Se usado acompanhado apenas do nome do pacote, ele extrai todos os seus arquivos:

unzip deeppurple.zip

replace deep_purple/Deep Purple - Fireball - 01 - Fireball.mp3? [y]es, [n]o, [A]ll, [N]one, [r]ename:

Se você tiver compactado os arquivos, usando encriptação, sua senha será pedida.
No exemplo acima, o unzip detectou que alguns dos arquivos constantes do pacote, já existem dentro do diretório original e quer saber se deve substituir (reescrever) cada arquivo:

  • [y]es; — Sim, substitui o arquivo do diretório pelo do pacote.
  • [n]o; — Não substitui e passa para o próximo.
  • [A]ll; — Substitui todos os arquivos do diretório, pelos que se encontram no pacote.
  • [N]one; — Não substitui nada.
  • [r]ename; — Renomeia. Vai pedir um novo nome para o arquivo que se encontra repetido.

Como usar os recursos de encriptação do zip

Se você está armazenando arquivos sensíveis, deve pensar seriamente em usar a criptografia para protegê-los melhor de curiosos ou roubos de dados.
A opção ‘-e’ ou ‘–encrypt’, criptografa o conteúdo do arquivo zip, usando uma senha, que deve ser digitada na linha de comando — 2 vezes para confirmar.

zip -e deeppurple.zip deep_purple/*

A opção ‘-P’ ou ‘–password’ também pode ser usada, mas é muito insegura — uma vez que deve ser dada junto com a senha na linha de comando. Desta maneira, qualquer pessoa, por trás de você, pode ver a senha digitada, além do fato de que o comando inteiro vai ficar armazenado no seu histórico.
É possível quebrar a criptografia de arquivos zipados (de vários formatos e tipos) com o uso de softwares apropriados.
Isto pode ser uma boa notícia. Caso você esqueça a senha de um pacote encriptado, pode ser útil saber como quebrar a segurança para ter acesso aos seus arquivos.
O artigo Como quebrar senhas de arquivos rar, 7z, zip etc explica como furar a segurança de arquivos compactados.
Atualmente, a maneira mais segura e acessível de criptografar seus arquivos é usando o GPG. Leia o artigo Como encriptar arquivos com o gpg, para saber como ficar do lado mais seguro.

O comando tar em 9 exemplos.

O comando tar é uma ferramenta eficiente e que tem sido muito usada, por muito tempo para compactar arquivos, diretórios, discos inteiros etc. — muitas vezes com o objetivo de fazer volumosos backups. Sim. Ele aguenta trabalho pesado.
Neste post, vou mostrar, através de alguns exemplos, como realizar algumas operações com o comando tar.
E, quando falamos nele, nos referimos tanto a um formato de arquivo quanto a um programa — presente no UNIX desde seus primeiros dias e desenvolvido, inicialmente, para gravar dados em dispositivos sequencias (gravadores de fitas).
O mundo mudou, os dispositivos de gravação evoluíram e o tar continua sendo muito utilizado – predominantemente como meio de comprimir múltiplos arquivos.

Como criar um arquivo tar simples

Um arquivo tar é comumente chamado, em inglês, tarball (bola tar) e pode ser facilmente criada a partir de um diretório. No exemplo, abaixo, vou mostrar a criação de arquivos_temporarios.tar, a partir do conteúdo do meu diretório temp/:

tar -cvf arquivos_temporarios.tar temp/
temp/
temp/portuguese_brazil.zip
temp/portuguese_brazil.lng

As opções usadas na declaração tar -cvf têm os seguintes efeitos:

  • c – (create) cria uma novo arquivo .tar
  • v – (verbose) torna a execução do comando mais “verbosa”, ou seja, ele vai “contando” o que está fazendo
  • f – indica que o resultado será do tipo arquivo (file)

Você pode experimentar usar -vv em substituição ao -v para ver o comando ser executado com mais verbosidade.

Como criar um arquivo .tar.gz

Um arquivo .tar.gz nada mais é que um arquivo .tar comprimido através do gzip – é por isto que ele tem o .gz na sua extensão. Para atingir este objetivo, use a opção -z, em conjunto com as anteriores. Veja:

tar -cvzf arquivos_temporarios.tar.gz temp/

Note que acrescentei o z e alterei o nome do arquivo de saída para temporarios.tar.gz

Como criar um arquivo bz2

bzip2 bzip logoArquivos bz2, são arquivos bzip2 – um compressor de dados que usa o algoritmo Burrows-Wheeler e pode reduzir o espaço ocupado por um arquivo em até 10% do seu volume original.
Em função da maior capacidade de compressão, eu recomendo usar sempre o bzip. A desvantagem do seu uso está na maior demora para comprimir ou descomprimir arquivos.
Veja como usar o bzip2, no lugar do gzip, na compressão de arquivos tar:

tar -cvjf arquivos_temporarios.tar.bz2 temp/

Note que substituí a opção z por j, no exemplo acima. A extensão também foi alterada para bz2

A extensão dos arquivos

Antes de seguir, gostaria de falar rapidamente sobre as extensões dos arquivos.
Você é livre para escolher a extensão que quiser. O arquivo de saída, do exemplo anterior, poderia se chamar temporarios.fofinhos – o conteúdo continuaria sendo exatamente o mesmo.
Mas o objetivo da extensão de um arquivo não é “ser fofa” ou bonita. Antes, ela deve ser informativa e ajudar os usuários a entender de que tipo se trata aquele arquivo, de forma que se possa usar o comando certo em relação a ele. Mais a frente, vamos ver que os comandos para descompressão dos arquivos variam em função de ter sido usado bzip (ou bzip2) ou gzip na sua compressão.

Extensões comuns ao usar o tar

Já que estamos falando no assunto, há alguns padrões bastante difundidos:

  • arquivos tar, comprimidos com gzip, usam extensões .tar.gz ou .tgz
  • arquivos tar, comprimidos com bzip2, usam predominantemente extensões .tar.bz ou .tbz ou .bz2

Como extrair arquivos tar

Para extrair o conteúdo de um arquivo tar, usamos a opção -x. Veja como funciona:

tar -xvf icones.tar

Se o arquivo estiver comprimido com o gzip:

tar -xvfz icones.tar.gz

Se estiver comprimido com bzip2:

tar -xvfj icones.tar.bz

Nota: O arquivo será sempre descomprimido no diretório atual. Use o comando pwd, caso não saiba em que diretório você se encontra.
Se quiser indicar outro diretório para descompactar o arquivo, use a opção -C acompanhada do diretório de destino. No exemplo abaixo, vou direcionar a extração do conteúdo do arquivo icones.tar.bz pro diretório ~/meus_icones/:

tar -xvfj icones.tar.bz -C ~/meus_icones/

Notou que usei a opção -C antes do diretório destino?

Como listar o conteúdo de um arquivo tar

A opção -t é a que permite listar o conteúdo de arquivos tar. Veja como funciona:

tar -tvf icones.tar
drwxr-xr-x root/root         0 2013-11-19 01:22 opt/icons/
-rw-r--r-- root/root     68458 2013-11-13 00:42 komodo128.png
-rw-r--r-- root/root     12053 2013-11-13 00:42 komodo48.png
-rw-r--r-- root/root      2349 2013-11-13 00:42 komodo16.xpm
-rw-r--r-- root/root     87697 2013-11-13 00:42 komodo128.xpm

Como listar o conteúdo de arquivos tar.gz ou tar.bz

Nestes casos o comando permanece o mesmo. Tome apenas o cuidado de indicar corretamente os nomes dos arquivos cujo conteúdo você deseja listar.
Para listar um arquivo .tar.gz:

tar -tvf icones.tar.gz

Para listar um arquivo .tar.bz:

tar -tvf icones.tar.bz

Como extrair apenas um arquivo de dentro do arquivo tar

Neste exemplo, vou extrair o arquivo komodo128.png de dentro do arquivo icones.tar:

tar -xvf icones.tar komodo128.png

Para remover um arquivo com o mesmo nome de dentro de um arquivo tar.gz, acrescente a opção -z:

tar -zxvf icones.tar.gz komodo128.png

Se o arquivo comprimido for um tar.bz, use a opção -j:

tar -jxvf icones.tar.bz komodo128.png

Como extrair vários arquivos de um arquivo tar, tar.gz ou tar.bz

Neste caso, listamos os diversos arquivos, usando aspas. Observe os exemplos:

tar -xvf icones.tar "komodo128.png" "komodo64.png"
tar -zxvf icones.tar.gz "komodo128.png" "komodo64.png"
tar -jxvf icones.tar.bz "komodo128.png" "komodo64.png"

Como extrair vários arquivos de um arquivo .tar, .tar.gz ou .tar.bz usando coringas

Através de coringas, podemos indicar um grupo de arquivos sobre o qual desejamos efetuar uma ação. Vou mostrar como extrair um grupo separado de arquivos de dentro de arquivo tar, tar.gz e tar.bz com o uso de coringas, ainda usando o exemplo do tópico anterior:

tar -xvf icones.tar --wildcards *.xpm
tar -zxvf icones.tar.gz --wildcards *.xpm
tar -jxvf icones.tar.bz --wildcards *.xpm

Como adicionar arquivos ou diretórios a arquivos tar já existentes

Esta possibilidade é especialmente útil para quem deseja acrescentar mais arquivos ou diretórios a um arquivo tar de backup preexistente.
No exemplo que segue, vou acrescentar o arquivo komodo32b.png ao arquivo tareado icones.tar. Para isto, vou usar a opção -r (append):

tar -rvf icones.tar komodo32b.png

Ou um diretório inteiro:

tar -rvf backup-sql-2014-15-02.tar sql/

Como adicionar arquivos ou diretórios a arquivos tar.gz ou tar.bz

Neste caso, a solução é recriar o arquivo, já incluindo estes novos na sua nova bola tar – o tar não tem como acrescentar arquivos a arquivos tar compactados com bzip2 ou gzip.

Como verificar arquivos tar

Arquivos de backup precisam ser checados sempre.
Seria desolador, após um desastre (toc, toc, toc), descobrir que as cópias de segurança não funcionam.
Novamente, não é possível aplicar a solução a arquivos tar.gz e tar.bz diretamente, com o comando tar – qualquer que seja a extensão, arquivos compactados, seja com bzip2 ou gzip.
Por isto, os scripts de backup, costumam tarear primeiro os arquivos, verificá-los e, se tudo estiver certo, compactá-los.
Veja um exemplo de verificação, com o seu resultado:

tar -cvWf backup-2014-02-11.tar

A solução para testar se o arquivo final tar.gz ou tar.bz está bom é usar o utilitário gzip ou o bzip2, com a opção ‘-t’:

gzip -tv backup.tar.gz 
backup.tar.gz:	 OK

ou

bzip2 -tv backup.tar.bz 
backup.tar.bz:	 OK

Conclusão

Para concluir, segue uma pequena tabela com as opções abordadas neste texto, para ajudar a lembrar;

  • c — para criar um arquivo do tipo arquivo;
  • x — para extrair arquivos de dentro do arquivo tar
  • v — mostra o processo na tela. A opção -vv exibe mais detalhes ainda;
  • f — determina o nome do arquivo tar;
  • t — exibe o conteúdo;
  • j — compacta ou descompacta os arquivos via bzip2
  • z — compacta ou descompacta os arquivos via gzip;
  • r — adiciona arquivos ao tar;
  • W — verifica a integridade do arquivo tar;
  • wildcards — permite trabalhar com coringas.

Por enquanto é só, pessoal!Por enquanto, é só! Espero que este breve tutorial tenha sido suficiente para sanar suas dúvidas. Use o man tar no terminal para ver outras opções de uso do comando tar e, caso eu tenha esquecido alguma coisa, no texto, por favor comente ali embaixo.