一个简单的问题。在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中压缩和提取文件的正确方法。谢谢
答案 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 -