如何压缩文件并保留.gz文件?


220

gunzip的默认行为是在解压缩后删除.gz文件。

如何防止它删除文件?

如果不包括此功能,那么是否有允许该功能的替代程序?

我正在使用Ubuntu 9.04


3
使用以下命令:gunzip -k
fazineroso 2015年

哪些gunzip具有-k选项?我没看到
Znik

1
@ Znik,gzip / gunzip 1.6及更高版本具有选项-k
aleksandr barakin

Answers:


220

您正在寻找:

gzcat x.txt.gz >x.txt

gzcat命令等效于gunzip -c简单地将输出流写入的命令stdout。这将使压缩文件保持不变。因此,您还可以使用:

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

请注意,在某些系统上,也称为gzcat,zcat因此应这样运行:

zcat x.txt.gz >x.txt

2
感谢您的回答。在DOS中与pkunzip一起成长时,我发现它是如此奇怪,以至于没有保留文件的选项。尤其是像gzip这样的工具被广泛使用...简直太奇怪了。

4
仅供参考,我实际上没有gzcat。我的本地系统或ssh's都没有。因此,我必须使用gunzip -c
Sen

26
它可能只是您系统上的zcat。
user23307'1

2
保留文件的其他选择确实不错。例如,b(un)zip2使用类似的语法,并允许简单地添加-k以保留原始文件。
schnaader 2011年

1
您还可以将行别名gzcat =“ gunzip -c”添加到您的.bashrc
James

55

您可以使用-cgunzip选项将输出写入stdout,然后将其通过管道传输到您选择的文件:

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

手册页上有更多详细信息。


顺便说一句,请注意,上面提到的手册页列出了-k选项,这意味着保留输入文件。也许这适用于BSD版本,但不适用于我的,所以-c解决方案似乎是正确的。

31

一个更简单的解决方案是只使用gunzip作为这样的过滤器:

gunzip < myfile.gz > myfile

我认为这是最干净的方法,因为它gunzip永远不知道它要获取的文件,它所看到的只是数据流,因此不可能更改原始文件。
沃尔夫

12

如果它实际上是一个tarball(.tgz或.tar.gz扩展名),那么与其像到目前为止的所有答案一样重定向到文件,不如将其通过管道传输到tar,如下所示:

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

这样您才能获得实际的内容。


7
或只是做:tar xzvf myfile.tar.gz
Joakim Elofsson 2009年

是的,但前提是您具有GNU tar。例如,Solaris随附的一个不支持z选项。
亚历克斯

5

使用该-c选项将文件解压缩到stdout。它不会触摸原始文件。

gunzip -c myfile.gz > myfile

4
gzip -dk myfile.gz

要么

gunzip -k myfile.gz

评论:

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

2

Gnu tar可以读取gzip文件:tar -zxsvf myfile.tar.gztar -jxzvf myfile.tar.bz2bzip压缩的tar文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.