在Linux上压缩`.zip`文件时出现错误

16

我使用命令行在我的 Mac OSX 上用 zip 命令和 -r 选项压缩了一个目录。我通过 scp.zip 文件传输到运行 Linux 的集群。

如果我尝试在我的机器上使用以下命令解压缩 .zip 文件:

tar -vxzf foo.zip

它可以顺利工作。但是在集群上,相同的命令无法正常工作,我得到以下错误:

gzip: stdin has more than one entry--rest ignored
tar: Child returned status 2
tar: Error is not recoverable: exiting now

我该如何解决这个问题?

3个回答

31

tar 命令用于解压 TAR 归档文件,而不是 zip 文件。你应该使用 unzip 命令代替 tar

unzip foo.zip

或者在 Mac 端创建一个 tar.gz 归档文件,而不是 zip 文件。

tar -cvzf foo.tar.gz ....

您可以在Linux端使用现有的tar命令来解压缩它。


这听起来现在很明显了,我以前不知道 TAR 存档是什么。顺便问一下,那为什么 tar 在我的 Mac 上可以解压 .zip 文件呢?非常感谢。 - Remi.b
4
在Mac上的tar是BSD tar版本,而不是Linux发行版上使用的GNU tar。苹果官方文档建议Mac tar可以处理zip文件,但GNU tar不能(除了另一篇答案中描述的有限情况)。 - Ian Roberts

6

2

标准的GNU tar不能直接处理.zip文件。我很惊讶MacOSX可以处理它。

问题在于tar知道如何处理gzip文件,而这些文件并不是Info-Zip(.zip)格式的文件。Info-Zip文件旨在处理归档和压缩,而tar则不行。(现在大多数tar实现都会根据命令行选项使用正确的压缩器/解压器来过滤tar文件。)

在您的集群上使用unzip。那是专门设计用来处理.zip文件的程序。您根本不需要tar


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