22

У меня есть файл tar.gz, и я хочу извлечь его с помощью терминала. Я использовал следующие команды: tar tvzf ldtp_3.5.0.orig.tar.gz и tar -xvzf ldtp_3.5.0.orig.tar.gz . Тем не менее, я получаю одинаковый результат для обоих файлов:

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Я вывод команды file показывает его файл gzip:

$ file ldtp_3.5.0.orig.tar.gz 
ldtp_3.5.0.orig.tar.gz: gzip compressed data, from Unix

Я могу извлечь его с помощью правой кнопки мыши -> Извлечь, но я хочу сделать это с помощью терминала. Может кто-нибудь сказать мне, как это сделать?

1 ответ1

30

Если посмотреть на ошибку, которую вы видите, в сочетании с тем фактом, что вы действительно можете распаковать, то это говорит о том, что файл является подлинным архивом TAR/Gzip, но, возможно, после Gzip не создается непосредственный TAR.

Это означает, что если вы загрузили это с веб-сервера, иногда Gzip-сжатие get применяется к веб-контенту на уровне сервера для ускорения загрузки контента. Но если на сервере неправильно настроено игнорирование уже сжатого контента, такого как этот, он может непреднамеренно удвоить файлы Gzip.

Имея это в виду, я бы посмотрел, просто ли распаковать его из командной строки, чтобы посмотреть, что произойдет. Используйте команду как это:

gzip -d ldtp_3.5.0.orig.tar.gz

И посмотрите, что это за файл. У меня странное чувство после того, как вы запустите эту команду, вы не увидите ldtp_3.5.0.orig.tar в каталоге, а скорее файл с именем, подобным источнику - ldtp_3.5.0.orig.tar.gz - но, возможно, с измененной модификацией ? Если это так, то это действительно двойной Gzipped. Таким образом, на этом этапе - после этого начального un-Gzip - вы можете выполнить команду tar вас есть, вот так:

tar -xvzf ldtp_3.5.0.orig.tar.gz

И теперь он должен правильно распаковать полный архив TAR.

Другой способ сделать что-то похожее на этот двухэтапный процесс - передать вывод gzip в tar следующим образом:

gzip -dc ldtp_3.5.0.orig.tar.gz | tar -xvzf -

c в gzip а также - в конце команды - это ключ:

  • Опция c для gzip скажет gzip распаковать в стандартный поток вывода.
  • Команда - в конце команды tar означает «использовать стандартный ввод». Таким образом, в сочетании с параметром -c в gzip канал затем берет стандартный поток вывода, передаваемый по нему из gzip и подключает его к стандартному вводу в tar .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .