tar:存档已压缩。使用 -z 选项。为什么 tar 要求我使用 -z 选项,而在提取模式下则忽略该选项?

tar:存档已压缩。使用 -z 选项。为什么 tar 要求我使用 -z 选项,而在提取模式下则忽略该选项?

tar: Archive is compressed. Use -z option尝试构建我的docker镜像时出现此错误:

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在提取模式下忽略选项时会发生此错误?

-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"

需要z将 添加到-f和之间的某个位置,而不是-。该选项-f需要一个参数,在本例中为-

以下是-faka--file选项的定义tar 源代码

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

您可以从代码中看到,后面-f需要跟一个文件名,在本例中是特殊名称,-意思是标准输出(3)

看来 tar 正在使用GNU argp用于解析 CLI 参数,而不是getopt(3)

相关内容