Linux: compactando e descompactando arquivos com o zip
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
).
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.
Cursos de uma série preparatória para a certificação Linux Essentials também estão sendo lançados!