Como compactar ou descompactar arquivos do terminal Linux

Prompt de shell do Linux
Fatmawati Achmad Zaenuri / Shutterstock.com

Os arquivos ZIP são um arquivo universal comumente usado em sistemas Windows, macOS e até mesmo Linux. Você pode criar um arquivo zip ou descompactar arquivos de um com alguns comandos de terminal Linux comuns.

O formato de arquivo compactado ZIP

Graças ao domínio do formato ZIP no domínio do Windows, os arquivos ZIP são provavelmente a forma mais comum de arquivo compactado no mundo.

Embora os arquivos .tar.gz e tar.bz2 sejam comuns no Linux, os usuários do Windows provavelmente enviarão um arquivo no formato ZIP. E, se você quiser arquivar alguns arquivos e enviá-los a um usuário do Windows, o formato ZIP será a solução mais fácil e compatível para todos.

zip, unzip e outros utilitários

Você já deve saber que o Linux e os sistemas operacionais semelhantes ao Unix, como o macOS, têm ferramentas que permitem criar arquivos ZIP e extrair arquivos deles, chamados zipe unzip. Mas há toda uma família de utilitários relacionados, tais como zipcloak, zipdetails, zipsplit, e zipinfo.

Verificamos algumas distribuições do Linux para ver se incluíam esses utilitários na instalação padrão. Todos os utilitários estavam presentes no Ubuntu 19.04, 18.10 e 18.04. Eles também estiveram presentes em Manjaro 18.04. O Fedora 29 incluiu zipe unzip, mas nenhum dos outros utilitários e esse também foi o caso do CentOS.

Para instalar os elementos ausentes no Fedora 29, use o seguinte comando:

sudo dnf install perl-IO-Compress

comando de instalação zip para Fedora

Para instalar os elementos ausentes no CentOS 7, use o seguinte comando:

sudo yum install perl-IO-Compress

Comando de instalação Zip em Centos

Se algum dos utilitários zip estiver faltando em uma distribuição Linux que não foi mencionada acima, use a ferramenta de gerenciamento de pacotes dessa distribuição Linux para instalar o pacote necessário.

Como criar um arquivo ZIP com o comando zip

Para criar um arquivo ZIP, você precisa informar zipo nome do arquivo compactado e quais arquivos incluir nele. Você não precisa adicionar a extensão “.zip” ao nome do arquivo, mas não faz mal se o fizer.

Para criar um arquivo chamado source_code.zipcontendo todos os arquivos de código-fonte C e arquivos de cabeçalho no diretório atual, você usaria este comando:

zip source_code * .c * .h

comando zip em uma janela de terminal

Cada arquivo é listado conforme é adicionado. O nome do arquivo e a quantidade de compactação alcançada nesse arquivo são exibidos.

Recomendado:  O que é o processo de tempo de execução do servidor cliente (csrss.exe) e por que ele está sendo executado no meu PC?

saída do comando zip em uma janela de terminal

Se você olhar para o novo arquivo ZIP, verá que a extensão de arquivo “.zip” foi adicionada automaticamente por zip.

ls -l source_code.zip

ls em arquivo zip em uma janela de terminal

Se você não quiser ver a saída zipconforme o arquivo ZIP é criado, use a -qopção (silencioso).

zip -q source_code * .c * .h

-q opção silenciosa em uma janela de terminal

Incluindo diretórios em arquivos ZIP

Para incluir subdiretórios no arquivo ZIP, use a -ropção (recursiva) e inclua o nome do subdiretório na linha de comando. Para criar um arquivo ZIP como antes e também incluir o subdiretório do arquivo, use este comando.

zip -r -q arquivo de código_de_origem / * .c * .h

Opção recursiva -r em uma janela de terminal

Para ser atencioso com a pessoa que extrairá os arquivos do arquivo ZIP que você está criando, geralmente é educado criar arquivos ZIP com os arquivos dentro deles contidos em um diretório. Quando a pessoa que recebe o arquivo ZIP o extrai, todos os arquivos são colocados ordenadamente em um diretório em seu computador.

No comando a seguir, vamos arquivar o workdiretório e todos os subdiretórios. Observe que este comando está sendo emitido a partir do diretório pai da workpasta.

zip -r -q source_code work /

compactando o diretório de trabalho em uma janela de terminal

Definir o nível de compressão

Você pode definir a quantidade de compactação aplicada aos arquivos à medida que são adicionados ao arquivo ZIP. O intervalo é de 0 a 9, sendo 0 nenhuma compactação. Quanto maior a compactação, mais tempo leva para criar o arquivo ZIP. Para arquivos ZIP de tamanho modesto, a diferença de tempo não é uma penalidade significativa. Mas então, para arquivos ZIP de tamanho modesto, a compactação padrão (nível 6) é provavelmente boa o suficiente de qualquer maneira.

Para conseguir zipusar um determinado nível de compressão, passe o número como uma opção na linha de comando, com um “-“, assim:

zip -0 -r -q source_code work /

-0 opção de compressão em uma janela de terminal

O nível de compactação padrão é 6. Não há necessidade de fornecer a -6opção, mas não fará mal se o fizer.

zip -r -q source_code work /

compressão de nível 6 em uma janela de terminal

O nível máximo de compressão é o nível 9.

zip -9 -r -q source_code work /

Compressão -9 em uma janela de terminal

Com a seleção de arquivos e diretórios sendo arquivados aqui, a diferença entre nenhuma compactação (nível 0) e a compactação padrão (nível 6) é 400K. A diferença entre a compactação padrão e o nível mais alto de compactação (nível 9) é de apenas 4K.

Isso pode não parecer muito, mas para arquivos contendo centenas ou mesmo milhares de arquivos, a pequena quantidade de compactação extra por arquivo significaria uma economia de espaço valiosa.

Adicionando senhas a arquivos ZIP

Adicionar senhas a arquivos ZIP é fácil. Use a -eopção (criptografar) e você será solicitado a inserir sua senha e digitá-la novamente para verificação.

zip -e -r -q source_code work /

Adicionar senhas a arquivos compactados em uma janela de terminal

Como descompactar um arquivo ZIP com o comando unzip

Para extrair os arquivos de um arquivo ZIP, use o comando unzip e forneça o nome do arquivo ZIP. Note que você fazer necessidade de fornecer a extensão “.zip”.

descompacte source_code.zip

o comando unzip em uma janela de terminal

Conforme os arquivos são extraídos, eles são listados na janela do terminal.

Recomendado:  O que é um monitor QD-OLED?

saída de descompactar em uma janela de terminal

Os arquivos ZIP não contêm detalhes sobre a propriedade do arquivo. Todos os arquivos extraídos têm o proprietário definido para o usuário que os extrai.

Da mesma forma zip, unzip possui uma -qopção (silenciosa), para que você não precise ver a listagem dos arquivos à medida que os arquivos são extraídos.

descompacte -q source_code.zip

opção descompactar -q em uma janela de terminal

Extraindo arquivos para um diretório de destino

Para que os arquivos sejam extraídos em um diretório específico, use a -dopção (diretório) e forneça o caminho para o diretório para o qual deseja que o arquivo seja extraído.

descompacte -q source_code.zip -d ./development

descompacte para um diretório de destino em uma janela de terminal

Extraia arquivos ZIP protegidos por senha

Se um arquivo ZIP foi criado com uma senha, unzipo solicitará a senha. Se você não fornecer a senha correta,  unzipnão irá extrair os arquivos.

descompacte -q source_code.zip

o comando descompactar com senha em uma janela de terminal

Se você não se importa que sua senha seja vista por outras pessoas – nem que seja armazenada em seu histórico de comando – você pode fornecer a senha na linha de comando com a -Popção (senha). (Você deve usar um “P” maiúsculo)

descompacte -P Fifty.treacle.cutlass -q source_code.zip

descompactando com opção de senha em uma janela de terminal

Excluindo Arquivos

Se você não deseja extrair um determinado arquivo ou grupo de arquivos, use a -xopção (excluir). Neste exemplo, queremos extrair todos os arquivos, exceto aqueles que terminam com a extensão “.h”.

descompacte -q source_code.zip -x * .h

opção descompactar e excluir em uma janela de terminal

Sobrescrever arquivos

Suponha que você extraiu um arquivo, mas excluiu alguns dos arquivos extraídos por engano.

Uma solução rápida para isso seria extrair os arquivos novamente. Mas se você tentar extrair o arquivo ZIP no mesmo diretório de antes, unzipo solicitará uma decisão sobre a substituição dos arquivos. Ele esperará uma das seguintes respostas.

Além da rresposta (renomear), essas respostas diferenciam maiúsculas de minúsculas.

  • y: Sim, sobrescrever este arquivo
  • n: Não, não substitua este arquivo
  • R: Tudo, sobrescrever todos os arquivos
  • N: Nenhum, sobrescrever nenhum dos arquivos
  • r: Renomeie, extraia este arquivo, mas dê a ele um novo nome. Será solicitado um novo nome.

sobrescrever prompts em uma janela de terminal

Para forçar unzipa sobrescrita de qualquer arquivo existente, use a -oopção (sobrescrever).

descompacte -o -q source_code.zip

opção de sobrescrever em uma janela de terminal

A maneira mais eficiente de substituir os arquivos ausentes seria unzipextrair apenas os arquivos do arquivo que não estão no diretório de destino. Para fazer isso, use a opção -n(nunca sobrescrever).

unzip -n source_code.zip

descompacte com a opção -n nunca sobrescrever em uma janela de terminal

Procurando dentro de um arquivo ZIP

Geralmente, é útil e instrutivo ver uma lista dos arquivos dentro de um arquivo ZIP antes de extraí-lo. Você pode fazer isso com a opção -l(arquivo de lista). Ele é canalizada através lessde tornar o gerenciável saída.

descompacte -l source_code.zip | Menos

opção de lista de descompactação em uma janela de terminal

A saída mostra os diretórios e arquivos dentro do arquivo ZIP, sua duração e a hora e data em que foram adicionados ao arquivo. Pressione “q” para sair less.

lista a saída do arquivo em uma janela de terminal

Existem outras maneiras de espiar dentro de um arquivo ZIP que fornecem diferentes tipos de informações, como veremos.

Recomendado:  O que significa “TFTI” e como você o usa?

Adicionar uma senha com o comando zipcloak

Se você criou um arquivo ZIP, mas se esqueceu de adicionar uma senha, o que pode fazer? Você pode adicionar rapidamente uma senha ao arquivo ZIP usando o zipcloakcomando. Passe o nome do arquivo ZIP na linha de comando. Será solicitada uma senha. Você precisa verificar a senha digitando-a uma segunda vez.

zipcloak source_code.zip

zipcloak em uma janela de terminal

Ver detalhes do arquivo com o comando zipdetails

O zipdetailscomando mostrará muitas informações sobre o arquivo ZIP. A única maneira sensata de lidar com a quantidade de saída que esse comando pode dar é canalizá-la less.

zipdetails source_code.zip | Menos

o comando zipdetails em uma janela de terminal

Observe que as informações incluirão nomes de arquivos, mesmo se o arquivo ZIP for protegido por senha. Este tipo de informação é armazenado no arquivo ZIP como metadados e não faz parte dos dados criptografados.

saída de detalhes zip em uma janela de terminal

Pesquise dentro do arquivo com o comando zipgrep

O zipgrepcomando permite pesquisar dentro dos arquivos em um arquivo ZIP. No exemplo a seguir, queremos saber quais arquivos dentro do arquivo ZIP contêm o texto “keyval.h”.

zipgrep keyval.h source_code.zip

o comando zipgrep em uma janela de terminal

Podemos ver que os arquivos slang.ce getval.ccontêm a string “keyval.h”. Também podemos ver que existem duas cópias de cada um desses arquivos em diretórios diferentes no arquivo ZIP.

Ver informações com o comando zipinfo

O zipinfocomando oferece outra maneira de olhar dentro de um arquivo ZIP. Como antes, canalizamos a saída less.

zipinfo source_code.zip | Menos

comando zipinfo em uma janela de terminal

Da esquerda para a direita, o resultado mostra:

  • As permissões do arquivo
  • A versão da ferramenta usada para criar o arquivo ZIP
  • O tamanho do arquivo original
  • Um descritor de arquivo (descrito abaixo)
  • O método de compressão (deflação, neste caso)
  • Os dados e carimbo de hora
  • O nome do arquivo e qualquer diretório

O descritor de arquivo é composto por dois caracteres. O primeiro caractere será um “t” ou um “b” para indicar um arquivo de texto ou binário. Se for uma letra maiúscula, o arquivo é criptografado. O segundo caractere pode ser um de quatro caracteres. Este caractere representa o tipo de metadados incluído para este arquivo: nenhum, um cabeçalho local estendido, um “campo extra” ou ambos.

  • -: Se nenhum dos dois existir, o caractere será um hífen
  • l: se houver um cabeçalho local estendido, mas nenhum campo extra
  • x: se não houver cabeçalho local estendido, mas houver um campo extra
  • X: se houver um cabeçalho local estendido e um campo extra

saída zipinfo em uma janela de terminal

Divida o arquivo com o comando zipsplit

Se você precisar enviar o arquivo ZIP para outra pessoa, mas houver restrições de tamanho ou problemas com a transmissão do arquivo, você pode usar o zipsplitcomando para dividir o arquivo ZIP original em um conjunto de arquivos ZIP menores.

A -nopção (tamanho) permite definir um tamanho máximo para cada um dos novos arquivos ZIP. Neste exemplo, estamos dividindo o source_code.ziparquivo. Não queremos que nenhum dos novos arquivos ZIP seja maior que 100 KB (102400 bytes).

zipsplit -n 102400 source_code.zip

o comando zipsplit em uma janela de terminal

O tamanho que você escolher não pode ser menor que o tamanho de qualquer um dos arquivos no arquivo ZIP.

Usando esses comandos, você pode criar seus próprios arquivos ZIP, descompactar os arquivos ZIP recebidos e realizar várias outras operações neles, sem nunca sair do terminal Linux.