tar: Архив сжат. Используйте опцию -z. Почему tar просит меня использовать опцию -z, если она игнорируется в режиме извлечения?

Я получаю эту ошибкуtar: Archive is compressed. Use -z optionпри попытке создать образ докера:

      RUN wget https://github.com/wal-g/wal-g/releases/download/v2.0.1/wal-g-pg-ubuntu-20.04-amd64.tar.gz -O - | \
  tar -xvf - -O > "${APP}/bin/wal-g"

Но почему эта ошибка возникает, когда опция игнорируется в режиме извлечения?

-z, --gunzip, --gzip
(только режим c) Сожмите полученный архив с помощью gzip(1). В режимах извлечения или списка эта
опция игнорируется. Обратите внимание, что эта реализация tar автоматически распознает сжатие gzip при чтении архивов.

Когда я добавляю-zвариант, я получаю еще одну ошибку:

      Cannot write to ‘-’ (Success).

1 ответ

Команда должна быть:

      wget https://github.com/wal-g/wal-g/releases/download/v2.0.1/wal-g-pg-ubuntu-20.04-amd64.tar.gz -O - |   tar zxvf - -O > "${APP}/bin/wal-g"

The zнеобходимо добавить где-то не между и . Опция требует аргумента, которым в данном случае является .

Вот как ака--fileОпция определена в исходном коде tar :

        {"file", 'f', N_("ARCHIVE"), 0,
   N_("use archive file or device ARCHIVE"), GRID_DEVICE },

Вы можете видеть из кода, что-fза ним должно следовать имя файла, в данном случае специальное имя-что означает stdout(3).

Кажется, что tar использует GNU argp для анализа аргументов CLI вместо getopt(3) .

Другие вопросы по тегам