如何存档和提取.tar.gz文件

时间:2014-01-24 17:38:23

标签: gzip tar solaris-10

一个简单的问题。在x86 Solaris 10上,我尝试了以下方法来压缩文件的文件夹(Data)。

tar -cvf /path/to/Data/* | gzip > /path/to/archive/Data.tar.gz

现在,我可以使用以下方式列出文件名及其大小:

gunzip -c Data.tar.gz

但是,当我尝试解压缩(用于验证)Data.tar.gz:

gzip -d Data.tar.gz
tar -xvf Data.tar

我得到了一个"校验和错误"

有人可以建议在Solaris 10中压缩和提取文件的正确方法。谢谢

3 个答案:

答案 0 :(得分:16)

您可以分两步执行存档

$ tar cvf archive.tar file* 
$ gzip archive.tar

(它将创建archive.tar.gz,同时删除archive.tar。)

提取也分为两步:

$ gunzip archive.tar.gz

(它将创建archive.tar并删除archive.tar.gz。)

$ tar xvf archive.tar

列出.gz文件中的文件:

gzip -l archive.tar.gz

或者,您可以使用7zip将所有文件放在一起并压缩它们。

7z a archive.7z Makefile* (to create archive)
7z l archive.7z           (to list files inside the archive)
7z e archive.7z           (to extract)

答案 1 :(得分:2)

你必须将tar cvf的输出定向到stdout,才能用gzip读取它:

tar cvf - <path> | gzip > <file>

通常还建议使用相对路径名。如果要在另一个系统上解压缩,则使用以/开头的路径可能会导致问题。 gnu tar会将绝对路径转换为相对路径。 gnu tar也接受压缩选项,因此不再需要gzip:

gnutar cvfz <file> <path>

此外,您可以执行以下操作:

tar cvf - <path> | ssh remotehost (cd <another dir>; gzip > <file>)

将在压缩之前更改目录。

Solaris tar的手册页,有更多示例。见man tar(8)。

答案 2 :(得分:1)

由于你正在管道(你应该),你需要使用-来表示stdin或stdout。 E.g。

tar -cvf - data/* | gzip > data.tar.gz
gzip -dc data.tar.gz | tar -xvf -