Como faço para compactar / descompactar na linha de comando do unix?


540

Como posso criar e extrair arquivos zip da linha de comando?


3
@joachim, você deve fazer a pergunta em uma pergunta e fornecer uma resposta em uma resposta. Não há problema em responder às suas próprias perguntas, mas não como parte da própria pergunta, pois isso quebra toda a vantagem de SO da comunidade de votos na melhor resposta. Além disso, isso provavelmente é mais adequado ao superusuário, pois não está relacionado à programação.

2
Onde você documentará como ficar on-line e verificar SO se esquecer seu login?

@ rlb.usa: Eu trabalho em muitos lugares diferentes em muitos servidores diferentes. Usar o SA para uma nota como essa também ajuda outras pessoas, a meu ver.
28911 joachim

Respostas:


662

Tipicamente utiliza um tarpara criar um arquivo não comprimido e quer gzipou bzip2para comprimir que arquivo. Os comandos gunzipe correspondentes bunzip2podem ser usados ​​para descompactar o arquivo morto, ou você pode simplesmente usar sinalizadores no tarcomando para executar a descompactação.

Se você está se referindo especificamente ao formato de arquivo Zip , pode simplesmente usar os comandos zipe unzip.

Para comprimir:

zip squash.zip file1 file2 file3

ou para compactar um diretório

zip -r squash.zip dir1

Para descompactar:

unzip squash.zip

isso descompacta no diretório de trabalho atual.


72
Pessoalmente, apenas uso a zip -r9 archive.zip files...sintaxe (-r = recursiva -9 = compressão máxima).
Amphetamachine

3
Apenas como uma observação lateral: você zippode criar muitos tipos diferentes de arquivos .ZIP, bem como usar muitos compressores diferentes. Por outro lado, existem várias outras ferramentas de compactação nomeadas de maneira semelhante: 7-Zip, gzip, bzip2, rzip etc. etc. que não são intercambiáveis.
polemon

5
Caso você não queira que o diretório pai seja incluído:cd dir1; zip -r ../squash.zip *
Marinos An

Estou confuso, fiz isso e recebo uma longa lista de inflações e extrações, mas quando verifico o diretório vazio, salve o arquivo zip original? Para onde tudo isso está indo?
Desenvolvedor de

11
Para o registro, use unzip -d myfolder squash.zippara extrair em um novo diretório separado ( myfolder) em vez de colocar todos os arquivos diretamente no diretório atual, o que pode ser irritante se o arquivo zip contiver muitos arquivos e diretórios em seu nível superior. Isso imita o funcionamento da maioria das ferramentas de descompactação da interface do usuário.
Alexander Klimetschek 8/03

64

Há um número verdadeiramente vasto de maneiras diferentes de compactar e descompactar sob derivativos UNIX, então eu vou assumir que você quis dizer "zip" no sentido genérico, em vez de um formato de arquivo específico .

Você pode compactar arquivos (em formato compactado) com o tarprograma GNU :

tar -zcvf myfile.tgz .

que fará o diretório atual. Substitua .por outros nomes de arquivo, se desejar outra coisa.

Para descompactar esse arquivo, use:

tar -zxvf myfile.tgz

Isso pressupõe, é claro, que você é tarcapaz de fazer a compactação e a combinação de arquivos em um.

Caso contrário, você pode simplesmente usar tar cvfseguido por gzip(novamente, se disponível) para compactação e gunzipseguido por tar xvf.


Para manipulação específica de arquivos no formato ZIP, eu recomendaria fazer o download 7zipe usá-lo - ele reconhece uma enorme variedade de formatos de arquivo, incluindo o ZIP.


Ou use tar jcvf file.tar.bz2...para compactar no formato bzip2 ou tar Jcvf file.tar.xz ...para a compactação xz.
OldTimer 11/03/16

4
A resposta foi negativa porque a pergunta é sobre como lidar com arquivos zip e não com arquivos tar.
Starfish

3
@ Starfish, isso certamente está dentro dos seus direitos, obrigado por pelo menos explicar o porquê, tantas pessoas não tomam tempo para fazer isso :-) Eu peguei o "zip" no sentido mais genérico (compactação), em vez de um formato específico, então eu vou deixar isso mais claro.

Esteja ciente de que os arquivos tar podem não funcionar corretamente ao se mover entre plataformas diferentes, mac para linux ou vice-versa. O Zip é muito mais seguro, pois funciona corretamente em todos os sistemas.
user1751825

Suponho que tecnicamente isso é gzip, então tudo bem. Eu acho. Obviamente, não é o que a pergunta fazia.
Owl

30

Se você não possui os pacotes zip e descompactar instalados e possui o java, pode jardescompactar:

jar -xf file.zip

3
Não é o meu servidor, não descompacte, zip, 7z, nada ... E isso funcionou. Obrigado!
Dariusz 31/05

2
Esta é uma ótima dica.
Starfish

29

Bem, quando se trata de distribuir arquivos para uma variedade de sistemas operacionais, eu recomendo o 7-zip .

Normalmente, no pacote p7zip, você obtém o comando 7ze 7za, com o qual pode criar seus próprios arquivos 7z.

7zatambém pode descompactar arquivos zip padrão ( pkzip ) (e criá-los também com o -tzipswitch).

Compressing:

7za a archive.7z file1 file2 directory/

Descomprimir:

7za x archive.7z

Também pode criar arquivos de extração automática com o -sfxswitch:

7za a -sfx archive.exe files1 file2 dir

Eu recomendo esse método caso os usuários do Windows não consigam abrir arquivos 7z (caso queira aconselhar uma ferramenta para isso: PeaZip ).

Se você deseja usar o mesmo algoritmo de compactação com seus tarballs, use o -Jswitch com tar:

tar cJf archive.tar.xz file1 file2 dir

xzé uma ferramenta UNIX, que utiliza LZMA2 para a compressão, mas funciona da maneira gz, bz2, etc funciona. Até funciona como um filtro.

O 7z não cria arquivos com informações completas do sistema de arquivos no UNIX, portanto, você precisará usá-lo tarantes de usar o 7z (mas como o 7z armazena outras informações sobre o tararquivo, eu recomendaria o uso xz, conforme projetado para ele):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
Talvez eu deva acrescentar esta resposta atool, é uma pequena ferramenta que torna o uso de muitos compressores diferentes mais confortável. Vincule que ae criar um arquivo se torne a arc.7z folder/ou extraia um simplesa arc.7z
polemon

21
unzip <filename>

e

zip -r archive.zip <filename> [filename]

Você precisará garantir que esses comandos sejam instalados através do seu gerenciador de pacotes. Não é mais difícil do que usar qualquer outra coisa na linha de comando. É certamente mais simples do que criar arquivos com tar.


Eu sei que este é um tópico antigo, mas esta é a melhor resposta. Não fala sobre 7z ou alcatrão, seu conciso e direto ao ponto
Kyle

4

O BSD Tar também pode fazer isso

bsdtar acf bravo.zip alfa.jpg

Ou:

bsdtar xf bravo.zip

O BSD tartem o benefício de suportar alguns formatos de compactação adicionais em comparação com o GNU tare outros tars. O maior benefício é, talvez, que ele o faça enquanto usa uma tarsintaxe semelhante . Você certamente pode usar 7z, unrar, unzip, etc a partir da linha de comando, mas eles usam uma diferente sintaxe.
njsg

3

A resposta mais padrão paxé a recomendada cpioe repetida tar.

Ao contrário do cpioPOSIX tar, mas como o GNU tar, paxé possível arquivar e compactar o arquivo. Esse comportamento é diferente de zip, que compacta cada arquivo antes de colocá-lo no arquivo morto.


1
Faz paxarquivos suporte zip?
Starfish

Não, e também não suporta paxarquivos!
roblogic 01/02

2

Isso cobre apenas extração.

Para isso, eu comecei a usar dtrx.

O objetivo é remover a complexidade. Então você apenas passa qualquer arquivo para ele e ele descobre o que precisa ser feito com ele. Zip, alcatrão, gz ... O uso é sempre o mesmo - dtrx archive.zip. Ele faz algumas perguntas e pronto.

dtrxestá disponível na maioria dos repositórios, para que você possa apt| yuminstale-o.


1

Muitas vezes me pego tentando compactar os arquivos modificados no meu diretório de trabalho - para copiar todos os arquivos modificados para outro diretório de trabalho da sandbox ou para preservá-los por um tempo porque quero desfazer algumas das alterações.

Nesse caso, eu copiar a lista de arquivos modificados para um arquivo temporário e usar zipcom a opção -@.

Digamos que eu modifiquei os arquivos Foo.h, Bar.cc e TestBar.cc.

Digamos que eu crie um arquivo chamado modified-files.txt cujo conteúdo seja:

Foo.h
Bar.cc
TestBar.cc

Eu executo o seguinte comando para compactar esses arquivos:

cat modified-files.txt | zip modified-files.zip -@
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.