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.
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
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.