我在一组文件上运行命令gzip
(以获取data.gz
),现在当我运行gunzip时,我只得到一个文件。我了解我应该使用tar保留文件结构。但是,我现在可以获取单独的文件吗?
目录具有两个文件1.sas7bdat
,2.sas7bdat
。我跑了:
$ gzip -c *.sas7bdat | ssh -l adsusername newserver.com 'cat > /home/username/data.gz'
现在,当我跑步时:
gunzip data.gz
我只得到一个文件,数据。我想要1.sas7bdat和2.sas7bdat
答案 0 :(得分:1)
如果从字面上看这是您使用的命令,那么您就没有问题。但是,也不应生成data.gz
文件,除非该文件已经存在。无论该目录中是否已经存在data.gz
文件,都会出现错误。您将得到gzip: data.gz already has .gz suffix -- unchanged
或gzip: 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一次提取一个成员来编写自己的程序,然后将它们写入单独的文件中。 inflateInit2
,inflate
,inflateEnd
函数具有正确的选项来选择gzip格式,一次只能提取一个成员。
答案 1 :(得分:0)
gzip压缩文件,而不是目录结构。
默认情况下,gzip在文件名的末尾添加.gz。
在您的情况下,您只需运行'gzip *',您将拥有两个单独的.gz文件
要压缩结构,可以使用带有z选项的tar直接压缩,而无需通过管道传输到gz。