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

5

一个简单的问题。在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个回答

17

您可以通过2个步骤进行归档

$ 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)

3
你需要将tar cvf的输出定向到标准输出,才能使用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)。


3

如果你使用管道,你需要使用-来指示标准输入或输出。例如:

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

当我尝试将其解压缩回来时,仍然会收到以下错误:“tar:directory checksum error”。请给予建议,谢谢。 - Shuvo Shams
以上对我有效。你在中间做了什么.tar.gz文件?这些命令是在不同的机器上运行吗? - Mark Adler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接