tar:将单个文件提取到目录而不创建子文件夹

tar:将单个文件提取到目录而不创建子文件夹

我的目标是通过尽可能少的步骤将helm二进制文件helm-v2.5.0-linux-amd64.tar.gz放入我的系统中。/usr/local/bin挑战在于该.tar.gz文件在子目录中包含二进制文件linux-amd64

所以当我这样做时:

$ wget -P /tmp https://storage.googleapis.com/kubernetes-helm/helm-v2.5.0-linux-amd64.tar.gz
$ tar -xzvf /tmp/helm-v2.5.0-linux-amd64.tar.gz -C /usr/local/bin linux-amd64/helm

我最终得到的/usr/local/bin/linux-amd64/helm不是/usr/local/bin/linux-amd64/helm.

我是否tar缺少某个参数,或者我是否需要包含一些mv清理步骤?

答案1

您需要使用--strip-components=NUMBER

--strip-components=NUMBER
          Strip NUMBER leading components from file names on extraction.

这意味着您的命令应如下所示:

tar -xzvf /tmp/helm-v2.5.0-linux-amd64.tar.gz -C /usr/local/bin --strip-components=1 linux-amd64/helm

答案2

另一种方法是wget直接通过管道输入tar并使用转换参数。

wget -O- https://storage.googleapis.com/kubernetes-helm/helm-v2.5.0-linux-amd64.tar.gz | tar --transform 's!linux-amd64!/usr/local/bin!' -Pxzf - linux-amd64/helm

相关内容