você pode usar o gzip -r myfolderque irá compactar os arquivos recursivamente. Da mesma maneira que você pode descompactar arquivos usando o gunzip -r myfolder que descompactará os arquivos recursivamente. Para mais informações, man gzip
Valentin Bajrami
12
Use tar; suporta opções de compactação. gzipfoi projetado como um complemento tare não como um substituto.
devnull
13
Observe que a sugestão de @ val0x00ff quase certamente não é o que você deseja realizar.
Shadur
4
@ Shahadur, é por isso que eu publiquei, commentpois essa não era a resposta para sua pergunta.
Valentin Bajrami
2
Demonstrar o que significa @Shadur. Arquivos fornecidos 1e 2na pasta playground. gzip -r ./playgrounddará a você 1.gze 2.gz(e não mais 1e 2arquivos) na pasta playground, NÃO um arquivo compactado com tudo.
Jeff Xiao
Respostas:
660
Não.
Ao contrário zip, gzipfunciona como um algoritmo de compressão única .
Devido a várias razões, algumas das quais remontam à época de unidades de fita, Unix usa um programa chamado tarpara arquivar dados, que pode ser compactado com um programa de compressão como gzip, bzip2, 7zip, etc.
Para "compactar" um diretório, o comando correto seria
tar -zcvf archive.tar.gz directory/
Isso dirá tarpara
compactá-lo usando o algoritmo z (gzip)
c (criar) um arquivo morto a partir dos arquivos directory( taré recursivo por padrão)
v (verbalmente) listar (em / dev / stderr para que não afete os comandos canalizados) todos os arquivos adicionados ao arquivo morto.
e armazene a saída como um f (arquivo) chamadoarchive.tar.gz
O tarcomando oferece gzipsuporte (por meio da -zbandeira) exclusivamente 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 morto 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 MUITAS outras opções e usos também; Eu recomendo vivamente ler sua página de manual em algum momento.
Apenas para tornar as coisas ainda mais explícitas, isso é exatamente equivalente a tar -cv directory | gzip > archive.tar.gz. O arquivo resultante pode ser extraído com tar -zxvfou mesmo zcat file.tar.gz | tar -xv. Aponte que o tar é completamente independente do gzip, o tarcomando inclui apenas o suporte ao gzip por conveniência.
Patrick
Eu tenho usado tar cvzfpor um bom tempo. uma coisa a observar: se você usar o Windows ( 7-zipa ser especificado) para descompactar um *.tar.gzarquivo, são necessárias duas rodadas. Um para descompactar o *.tar.gzarquivo em um *.tararquivo, o próximo para descompactar esse arquivo tar no conteúdo original. aumenta o tempo total de descompactação, especialmente para arquivos grandes (por exemplo, logs)
Jeff Xiao
1
A nomeação do arquivo afeta algo em termos de máquina? Eu sei que seria bom informar às pessoas o algoritmo originalmente usado para compactá-lo (daí o .gz), mas, fora isso, é realmente importante como você nomeia o arquivo?
9136 hello_there_andy
3
@hello_there_andy Não faz diferença para a maioria dos unixes, mas o Windows (e a conclusão de guias inteligentes no linux) fará suposições com base na extensão do nome do arquivo.
O gzipcomando não comprime recursivamente um diretório em um único arquivo zip, ao usar a -ropção. Em vez disso, ele percorrerá a estrutura de diretórios e compactará cada arquivo encontrado em um arquivo separado.
#!/bin/bash
if [[ -d $1 ]]; then
cd "$1"
cd ..
base=$(basename "$1")
tar -zcvf "$base.tgz" "$base"
if [[ $? == 0 && -f "$base.tgz" ]]; then
rm -rf "$base"
fi
else
echo "Usage: $0 DIRECTORY";
fi
ungzipdir:
#!/bin/bash
if [[ -f $1 ]]; then
base=${1%%.*}
file=$(basename "$1");
dir=$(basename "$base");
if [[ ! -d $base ]]; then
mkdir "$base"
cd "$base"
cd ..
tar -xvf "$file"
if [[ $? == 0 && -d "$dir" ]]; then
rm -f "$file"
fi
else
echo "Directory $base already exists. Nothing done."
fi
else
echo "Usage: $0 file.tgz";
fi
(!!!) Teste antes do uso (pois existe um 'rm -f' que pode remover dados importantes se usados de maneira incomum).
Como usar:
cd /home/; gzipdir MyDirectory ou gzipdir /home/MyDirectory
Criará /home/MyDirectory.tgz e removerá o MyDirectory com êxito (!!!).
ungzipdir /home/MyDirectory.tgz
Criará / home / MyDirectory e removerá /home/MyDirectory.tgz com êxito.
Para compactar TODOS os arquivos em um diretório: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (tenha cuidado com o comando find, teste-o -exec echo {}primeiro e verifique se você não está capturando './', que compactará o diretório PARENT, possivelmente quebrando todo o diretório pessoal)
andrew lorien
1
Eu recomendo usar pigz( Implementação Paralela do GZip )
Se você tiver uma nova pergunta, faça-o clicando no botão Fazer pergunta . Inclua um link para esta pergunta se ela ajudar a fornecer contexto. - Da avaliação
Jeff Schaller
2
@ JeffSchaller: Esta é uma resposta. É uma coisa extremamente errada (acredito), mas é claramente uma resposta.
Scott
1
@ize: Eu tenho certeza que o comando que você postou não usa o gzip.
dhag
1
Pontos por usar o zip como a pergunta feita, provavelmente o autor gostaria de saber que é possível fazer a mesma coisa que costumava fazer no Windows. É triste que a maioria das pessoas não queira pensar tão longe.
Florian Heigl
2
É complicado quando a pergunta especifica ... "using gzip".
Jeff Schaller
1
Para garantir a integridade, se você quiser tar o arquivo em segundo plano, use a resposta de @ Shadur e adicione &no final:
gzip -r myfolder
que irá compactar os arquivos recursivamente. Da mesma maneira que você pode descompactar arquivos usando ogunzip -r myfolder
que descompactará os arquivos recursivamente. Para mais informações,man gzip
tar
; suporta opções de compactação.gzip
foi projetado como um complementotar
e não como um substituto.comment
pois essa não era a resposta para sua pergunta.1
e2
na pastaplayground
.gzip -r ./playground
dará a você1.gz
e2.gz
(e não mais1
e2
arquivos) na pastaplayground
, NÃO um arquivo compactado com tudo.Respostas:
Não.
Ao contrário
zip
,gzip
funciona como um algoritmo de compressão única .Devido a várias razões, algumas das quais remontam à época de unidades de fita, Unix usa um programa chamado
tar
para arquivar dados, que pode ser compactado com um programa de compressão comogzip
,bzip2
,7zip
, etc.Para "compactar" um diretório, o comando correto seria
Isso dirá
tar
paracompactá-lo usando o algoritmo z (gzip)
c (criar) um arquivo morto a partir dos arquivos
directory
(tar
é recursivo por padrão)v (verbalmente) listar (em / dev / stderr para que não afete os comandos canalizados) todos os arquivos adicionados ao arquivo morto.
e armazene a saída como um f (arquivo) chamado
archive.tar.gz
O
tar
comando oferecegzip
suporte (por meio da-z
bandeira) exclusivamente para sua conveniência. Ogzip
comando / lib é completamente separado. O comando acima é efetivamente o mesmo quePara descompactar e descompactar o arquivo morto no diretório atual, você usaria
Esse comando é efetivamente o mesmo que
tar
tem muitas, muitas MUITAS outras opções e usos também; Eu recomendo vivamente ler sua página de manual em algum momento.fonte
tar -cv directory | gzip > archive.tar.gz
. O arquivo resultante pode ser extraído comtar -zxvf
ou mesmozcat file.tar.gz | tar -xv
. Aponte que o tar é completamente independente do gzip, otar
comando inclui apenas o suporte ao gzip por conveniência.tar cvzf
por um bom tempo. uma coisa a observar: se você usar o Windows (7-zip
a ser especificado) para descompactar um*.tar.gz
arquivo, são necessárias duas rodadas. Um para descompactar o*.tar.gz
arquivo em um*.tar
arquivo, o próximo para descompactar esse arquivo tar no conteúdo original. aumenta o tempo total de descompactação, especialmente para arquivos grandes (por exemplo, logs)O
gzip
comando não comprime recursivamente um diretório em um único arquivo zip, ao usar a-r
opção. Em vez disso, ele percorrerá a estrutura de diretórios e compactará cada arquivo encontrado em um arquivo separado.Exemplo
antes
agora execute o
gzip
comandodepois de
Se você preferir compactar a estrutura de diretórios, provavelmente desejará usar o
tar
comando e compactar o.tar
arquivo resultante .Exemplo
O que resulta no seguinte arquivo único:
Você pode confirmar seu conteúdo:
fonte
Eu escrevi estes 2 comandos:
gzipdir
:ungzipdir
:(!!!) Teste antes do uso (pois existe um 'rm -f' que pode remover dados importantes se usados de maneira incomum).
Como usar:
cd /home/; gzipdir MyDirectory
ougzipdir /home/MyDirectory
Criará /home/MyDirectory.tgz e removerá o MyDirectory com êxito (!!!).
ungzipdir /home/MyDirectory.tgz
Criará / home / MyDirectory e removerá /home/MyDirectory.tgz com êxito.
fonte
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(tenha cuidado com o comando find, teste-o-exec echo {}
primeiro e verifique se você não está capturando './', que compactará o diretório PARENT, possivelmente quebrando todo o diretório pessoal)Eu recomendo usar
pigz
( Implementação Paralela do GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
fonte
A resposta à pergunta "Posso compactar uma pasta inteira usando o zip no linux?" É usar a sintaxe:
fonte
Para garantir a integridade, se você quiser tar o arquivo em segundo plano, use a resposta de @ Shadur e adicione
&
no final:fonte
Se o seu tar linux não suporta a
-z
opção, você pode usar o seguinte:fonte