Estou tentando compactar uma pasta no unix. Isso pode ser feito usando o comando gzip?
Responder1
Não.
Ao contrário zip
, gzip
funciona 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 tar
para arquivar dados, que podem então ser compactados com um programa de compactação como gzip
,,, etc.bzip2
7zip
Para "zipar" um diretório, o comando correto seria
tar -zcvf archive.tar.gz directory/
Isto dirá tar
a
comprima-o usando ozalgoritmo (gzip)
c(criar) um arquivo a partir dos arquivos em
directory
(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) nomeado
archive.tar.gz
O tar
comando oferece gzip
suporte (através da -z
bandeira) apenas para sua conveniência. O gzip
comando/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
tar
tem 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 gzip
comando não compactará recursivamente um diretório em um único arquivo zip, ao usar a -r
opçã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 gzip
comando
$ 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 tar
comando e compactar o .tar
arquivo 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 zip
programa 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