Posso compactar uma pasta inteira usando gzip?

Posso compactar uma pasta inteira usando gzip?

Estou tentando compactar uma pasta no unix. Isso pode ser feito usando o comando gzip?

Responder1

Não.

Ao contrário zip, gzipfunciona como um algoritmo de compressãoapenas.

Por vários motivos , alguns dos quais remontam à era das unidades de fita, o Unix usa um programa chamado tarpara arquivar dados, que podem então ser compactados com um programa de compactação como gzip,,, etc.bzip27zip

Para "zipar" um diretório, o comando correto seria

tar -zcvf archive.tar.gz directory/ 

Isto dirá tara

  • comprima-o usando ozalgoritmo (gzip)

  • c(criar) um arquivo a partir dos arquivos emdirectory( taré recursivo por padrão)

  • v(detalhadamente) lista (em /dev/stderr para que não afete os comandos canalizados) todos os arquivos que ele adiciona ao arquivo.

  • e armazene a saída como umf(arquivo) nomeadoarchive.tar.gz

O tarcomando oferece gzipsuporte (através da -zbandeira) apenas para sua conveniência. O gzipcomando/lib é completamente separado. O comando acima é efetivamente o mesmo que

tar -cv directory | gzip > archive.tar.gz

Para descompactar e descompactar o arquivo no diretório atual você usaria

tar -zxvf archive.tar.gz

Esse comando é efetivamente o mesmo que

gunzip < archive.tar.gz | tar -xv

tartem muitas, muitas outras opções e usos também; Eu recomendo vivamente a leitura de sua página de manual em algum momento.

Responder2

O gzipcomando não compactará recursivamente um diretório em um único arquivo zip, ao usar a -ropção. Em vez disso, ele percorrerá essa estrutura de diretórios e compactará cada arquivo encontrado em um arquivo separado.

Exemplo

antes

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

agora execute o gzipcomando

$ gzip -r dir1

depois

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

Se preferir compactar a estrutura de diretórios, provavelmente você desejará usar o tarcomando e compactar o .tararquivo resultante.

$ tar zcvf dir1.tar.gz dir1/

Exemplo

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

O que resulta no seguinte arquivo único:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

Você pode confirmar seu conteúdo:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

Responder3

A resposta à pergunta “Posso compactar uma pasta inteira usando gzip [no Linux]?” é que você pode usar o zipprograma no lugar do gzip, com a sintaxe:

zip -r <zip file name> <folder to zip>

Responder4

Eu recomendo usar pigz(Implementação paralela de GZip)

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

informação relacionada