Ошибка, когда `tar``.zip` в Linux

Я закрепил каталог на моем 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

Как я могу решить эту проблему?

Ответ 1

Команда tar предназначена для распаковки архивов TAR, а не файлов zip. Вы должны либо использовать команду unzip вместо tar:

unzip foo.zip

Или создайте архив tar.gz на стороне Mac вместо zip файла

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

который можно распаковать с помощью существующей команды tar на стороне Linux.

Ответ 2

Эта ошибка:

gzip: stdin has more than one entry--rest ignored

означает, что tar пытается распаковать zip-архив, как если бы это был архив gzip, который не всегда работает (см. " Созданные файлы zip может быть сжат gzip только в том случае, если у них есть один член, сжатый с помощью метода" дефляции" для получения дополнительной информации).

Вместо распаковки zip-архива следует использовать unzip foo.zip.

Ответ 3

Стандартный GNU tar не обрабатывает файлы .zip напрямую. Я удивлен, что MacOSX справляется с этим.

Проблема в том, что tar знает, как обрабатывать файлы gzip, которые являются файлами формата не Info-Zip (.zip). Файлы Info-Zip предназначены для обработки как архивирования, так и сжатия, а tar - нет. (Большинство реализаций tar теперь фильтруют файл tar с помощью соответствующего компрессора/декомпрессора на основе параметров командной строки.)

Используйте unzip вместо кластера. Программа предназначена для обработки файлов .zip. Вам вообще не нужно tar.