Linux: compactando e descompactando arquivos com o zip

(Last Updated On: 6 de Maio de 2016)

A compactação e descompactação de diretórios e arquivos é uma tarefa bastante comum no dia a dia. Podemos compactar um diretório para enviar para um amigo ou realizar um backup. Talvez para alguns usuários, mais comum que a compactação seja a descompactação: no nosso cotidiano podemos baixar arquivos compactados dos mais diversos tipos e, naturalmente precisaremos descompactá-los para que seja possível utilizá-los devidamente.

O objetivo da compactação é unir vários arquivos em um só, fazendo também com que o arquivo final fique menor e seja mais fácil de transferir. Isso é feito através de programas compactadores de arquivos, que utilizam algoritmos para que seja possível reduzir o tamanho dos dados que serão compactados.

Um dos formatos de compactação bastante conhecido é o zip. Você certamente já viu algum arquivo com extensão .zip em sua vida. No Linux, para compactar no formato .zip utilizamos o comando zip. Tenho um diretório, dentro do diretório do meu usuário (/home/nome_do_usuario) que contém alguns projetos, vamos ver o conteúdo desse diretório através do comando $ ls -l Projetos/.

Note que utilizei o argumento -l junto ao ls para obter uma lista mais detalhada. O “d” no início de cada linha indica que temos dois diretório dentro de Projetos (GeradorDeXML e GeradorDeJSON).

ls_l

Vamos compactar a pasta projetos utilizando o zip. Para isso basta passar para o comando o nome do arquivo que irá conter os dados compactados e o que desejamos compactar.

$ zip projetos.zip Projetos/
  adding: Projetos/ (stored 0%)

Compactamos o diretório Projetos/ para um arquivo zip. E para descompactar? Será que temos que usar zip -alguma coisa? Na verdade, para fazermos a descompactação utilizamos um outro comando, o unzip.

Mas antes vamos listar os arquivos que estão inclusos no nosso arquivo .zip. Para isso basta utilizar o argumento -l (list).

$ unzip -l projetos.zip 
Archive:  projetos.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2016-05-01 15:02   Projetos/
---------                     -------
        0                     1 file

Espera aí! Dentro do arquivo projetos.zip existe apenas o diretório Projetos/. O que houve com os diretórios GeradorDeJSON e GeradorDeXML?

Acontece que, por padrão, o zip não inclui os arquivos e subdiretórios de um diretório, por isso nosso .zip contém apenas o diretório Projetos/ vazio. Para resolver isso é fácil: basta passar o argumento -r (recursive).

$ zip -r projeto.zip Projetos/
updating: Projetos/ (stored 0%)
updating: Projetos/GeradorDeXML/ (stored 0%)
updating: Projetos/GeradorDeXML/GeradorXML.java (deflated 53%)
updating: Projetos/GeradorDeJSON/ (stored 0%)
updating: Projetos/GeradorDeJSON/GeradorJSON.java (deflated 53%)

Veja só! A saída do zip já foi diferente. Vamos listar o conteúdo do .zip gerado.

$ unzip -l projeto.zip 
Archive:  projeto.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2016-05-01 18:03   Projetos/
        0  2016-05-01 18:00   Projetos/GeradorDeXML/
      594  2016-04-25 14:08   Projetos/GeradorDeXML/GeradorXML.java
        0  2016-05-01 18:00   Projetos/oi.txt
        0  2016-05-01 18:00   Projetos/GeradorDeJSON/
      594  2016-04-25 14:08   Projetos/GeradorDeJSON/GeradorJSON.java
---------                     -------
     1188                     6 files

Agora sim! Os subdiretórios foram incluídos. Perceba que o zip, por padrão, informa na saída do terminal todos os diretórios e subdiretórios que estão sendo compactados. O unzip funciona da mesma forma na descompactação. Para que isso não ocorra, podemos utilizar o argumento -q (quiet).

Vamos primeiro excluir o diretório Projetos/ para que no momento da descompactação o diretório seja criado novamente.

$ rm -r Projetos/
$ unzip -q projeto.zip

Pronto! O arquivo foi descompactado e temos a estrutura de diretórios de antes.

Vimos como utilizar o zip para compactação e descompactação de arquivos. Em breve um outro post será publicado onde será utilizado o tar para realizar a compactação e descompactação.

Você pode aprender mais sobre Linux ou mesmo iniciar no uso desse sistema operacional nos nossos cursos de Linux do Alura.

Cursos de uma série preparatória para a certificação Linux Essentials também estão sendo lançados!

FIQUE POR DENTRO

Próximo ArtigoMétodo main em Java