GZIP不正确地用于压缩多个文件

时间:2018-10-05 04:00:15

标签: linux command-line-interface gzip

我在一组文件上运行命令gzip(以获取data.gz),现在当我运行gunzip时,我只得到一个文件。我了解我应该使用tar保留文件结构。但是,我现在可以获取单独的文件吗?

目录具有两个文件1.sas7bdat2.sas7bdat。我跑了:

$ gzip -c *.sas7bdat | ssh -l adsusername newserver.com 'cat > /home/username/data.gz'

现在,当我跑步时:

gunzip data.gz

我只得到一个文件,数据。我想要1.sas7bdat和2.sas7bdat

2 个答案:

答案 0 :(得分:1)

如果从字面上看这是您使用的命令,那么您就没有问题。但是,也不应生成data.gz文件,除非该文件已经存在。无论该目录中是否已经存在data.gz文件,都会出现错误。您将得到gzip: data.gz already has .gz suffix -- unchangedgzip: data.gz: No such file or directory

gzip命令行上的名称分别进行 压缩,并生成 distinct 文件,命令行上每个文件一个。 gzip file1 file2 file3的结果是文件file1.gz,file2.gz和file3.gz。恢复这些文件所需要做的就是gunzip *.gz

更新:

现在我们看到您使用的 actual 命令,您可以浏览该文件以尝试确定第一个结束于哪里,第二个开始于何处。

您使用-c选项将压缩数据写入stdout,stdout在压缩两个输入文件之前将它们串联在一起。因此,gunzip data.gz之后的最终结果与cat *.sas7bdat > data相同。

但是,data.gz文件确实在内部秘密地将两个文件分开,尽管没有实用程序可以分别提取它们。您可以使用zlib一次提取一个成员来编写自己的程序,然后将它们写入单独的文件中。 inflateInit2inflateinflateEnd函数具有正确的选项来选择gzip格式,一次只能提取一个成员。

答案 1 :(得分:0)

gzip压缩文件,而不是目录结构。

默认情况下,gzip在文件名的末尾添加.gz。

在您的情况下,您只需运行'gzip *',您将拥有两个单独的.gz文件

要压缩结构,可以使用带有z选项的tar直接压缩,而无需通过管道传输到gz。