Como você injeta um arquivo e mantém o arquivo .gz?

220

O comportamento padrão do gunzip é excluir o arquivo .gz após a descompactação.

Como evito que ele exclua o arquivo?

Se essa funcionalidade não estiver incluída, existe um programa alternativo que permita isso?

Estou usando o Ubuntu 9.04

Sen
fonte
3
use o seguinte comando: gunzip -k
fazineroso
que gunzip tem a opção -k? Não vejo ninguém.
Znik 27/11/2015
1
@Znik, gzip / gunzip versão 1.6 e superior tem a opção-k .
aleksandr Barakin

Respostas:

220

Você está procurando:

gzcat x.txt.gz >x.txt

O gzcatcomando é equivalente ao gunzip -cqual simplesmente grava o fluxo de saída stdout. Isso deixará o arquivo compactado intocado. Então você também pode usar:

gunzip -c x.txt.gz >x.txt

Observe que em alguns sistemas o gzcat também é conhecido como sendo zcatexecutado assim:

zcat x.txt.gz >x.txt
rogerdpack
fonte
2
Obrigado pela resposta. Crescendo com o pkunzip no DOS, acho tão estranho que não há uma opção para manter o arquivo. Especialmente com uma ferramenta como o gzip sendo tão amplamente usada ... apenas estranha.
23409 Sen
4
Para sua informação, na verdade não tenho gzcat. Nem o meu sistema local nem o sistema em que fui transferido. Então, eu tenho que usar gunzip -c
Sen
26
provavelmente é apenas o zcat no seu sistema.
precisa saber é o seguinte
2
Uma opção adicional para manter o arquivo seria realmente agradável. Por exemplo, b (un) zip2 usa sintaxe semelhante e permite simplesmente adicionar -kpara manter o arquivo original.
schnaader 8/09/11
1
Você também pode adicionar o gzcat linha alias = "gunzip -c" para o seu .bashrc
James Kingsbery
55

Você pode usar a -copção gunzip, que grava a saída em stdout e, em seguida, canaliza-a para o arquivo de sua escolha:

gunzip -c compressed-file.gz > decompressed-file

Mais detalhes na página do manual .

Stef
fonte
A propósito, observe que a página de manual mencionada acima lista uma opção -k, o que significa manter os arquivos de entrada. Talvez isso funcione na versão BSD, mas não na minha, então a solução -c parece ser a correta.
31

Uma solução mais simples é usar o gunzip como um filtro como este:

gunzip < myfile.gz > myfile
retrátil
fonte
Eu acho que essa é a maneira mais limpa, pois gunzipnunca se sabe qual arquivo está recebendo, tudo o que vê é um fluxo de dados; portanto, não é possível alterar o arquivo original.
Walf
12

Se na verdade é um tarball (extensão .tgz ou .tar.gz), em vez de redirecionar para o arquivo como todas as respostas até agora, convém canalizá-lo para o tar, da seguinte maneira:

gunzip -c myfile.tar.gz | tar xvf -

para que você obtenha o conteúdo real.

Alex
fonte
7
ou apenas fazer: myfile.tar.gz tar xzvf
Joakim Elofsson
true, mas somente se você tiver o GNU tar. O que acompanha o Solaris, por exemplo, não suporta a opção z.
Alex
5

Use a -copção para descompactar o arquivo em stdout. Não tocará no arquivo original.

gunzip -c myfile.gz > myfile
multidão
fonte
4
gzip -dk myfile.gz

OU

gunzip -k myfile.gz

Comentários:

   -k --keep    Keep (don't delete) input files during compression or decompression.
Nabi KAZ
fonte
2

O gnu tar pode ler arquivos gzip: tar -zxsvf myfile.tar.gzou tar -jxzvf myfile.tar.bz2para arquivos tar bzipados.

Justin Smith
fonte