¿Cómo se comprime un archivo y se mantiene el archivo .gz?

220

El comportamiento predeterminado de gunzip es eliminar el archivo .gz después de que se descomprime.

¿Cómo evito que elimine el archivo?

Si esta funcionalidad no está incluida, ¿hay algún programa alternativo que lo permita?

Estoy usando Ubuntu 9.04

Sen
fuente
3
use el siguiente comando: gunzip -k
fazineroso
¿Qué gunzip tiene la opción -k? No veo a nadie
Znik
1
@Znik, gzip / gunzip versión 1.6 y superior tiene la opción-k .
aleksandr barakin

Respuestas:

220

Estas buscando:

gzcat x.txt.gz >x.txt

El gzcatcomando es equivalente al gunzip -cque simplemente escribe la secuencia de salida stdout. Esto dejará el archivo comprimido intacto. Entonces también puedes usar:

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

Tenga en cuenta que, en algunos sistemas, gzcat también se conoce como zcatejecutar así:

zcat x.txt.gz >x.txt
rogerdpack
fuente
2
Gracias por la respuesta. Al crecer con pkunzip en DOS, me resulta tan extraño que no hay una opción para mantener el archivo. Especialmente con una herramienta como gzip que se usa tanto ... simplemente extraño.
Sen
44
FYI, en realidad no tengo gzcat. Ni mi sistema local ni el sistema en el que me metieron. Entonces, tengo que usar gunzip -c
Sen
26
probablemente sea solo zcat en su sistema.
user23307
2
Una opción adicional para mantener el archivo sería realmente buena. Por ejemplo, b (un) zip2 usa una sintaxis similar y permite simplemente agregar -kpara mantener el archivo original.
schnaader
1
También puede agregar la línea alias gzcat = "gunzip -c" a su .bashrc
James Kingsbery
55

Puede usar la -copción de gunzip que escribe la salida en stdout y luego canalizarla al archivo de su elección:

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

Más detalles en la página del manual .

Stef
fuente
Por cierto, tenga en cuenta que la página del manual mencionada anteriormente enumera una opción -k, lo que significa mantener los archivos de entrada. Tal vez esto funcione en la versión BSD, pero no en la mía, por lo que la solución -c parece ser la correcta.
31

Una solución más simple es usar gunzip como un filtro como este:

gunzip < myfile.gz > myfile
retroceder
fuente
Creo que esta es la forma más limpia ya que gunzipnunca sabe qué archivo está obteniendo, todo lo que ve es un flujo de datos, por lo que no es posible alterar el archivo original.
Walf
12

Si en realidad es un tarball (extensión .tgz o .tar.gz), en lugar de redirigir a un archivo como todas las respuestas hasta ahora, querrás canalizarlo a tar, de esta manera:

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

para que obtengas el contenido real.

Alex
fuente
77
o simplemente hacer: tar xzvf myfile.tar.gz
Joakim Elofsson
cierto, pero solo si tienes GNU tar. El que viene con Solaris, por ejemplo, no admite la opción z.
Alex
5

Use la -copción para descomprimir el archivo a stdout. No tocará el archivo original.

gunzip -c myfile.gz > myfile
multitud
fuente
4
gzip -dk myfile.gz

O

gunzip -k myfile.gz

Comentarios:

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

Gnu tar puede leer archivos gzip: tar -zxsvf myfile.tar.gzo tar -jxzvf myfile.tar.bz2para archivos tar bzipped.

Justin Smith
fuente