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 & cleanup?

Вам нужно использовать --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 

Другой подход, прокладка wget прямо в tar и использование параметра transform.

 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