tar: extrai um único arquivo para um diretório sem criar subpastas

2

Meu objetivo é obter o binário helm de helm-v2.5.0-linux-amd64.tar.gz em meu /usr/local/bin no menor número de etapas possível. O desafio é que o arquivo .tar.gz contém o binário em um subdiretório linux-amd64 .

Então, quando faço isso:

$ 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

Acabo com /usr/local/bin/linux-amd64/helm em vez de /usr/local/bin/linux-amd64/helm .

Existe um parâmetro tar que estou em falta ou preciso incluir alguns mv & etapas de limpeza?

    
por Borek Bernard 18.07.2017 / 23:03

2 respostas

3

Você precisa usar --strip-components=NUMBER :

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

, o que significa que seu comando deve ficar assim:

tar -xzvf /tmp/helm-v2.5.0-linux-amd64.tar.gz -C /usr/local/bin --strip-components=1 linux-amd64/helm
    
por 18.07.2017 / 23:13
2

Outra abordagem, canalizando wget diretamente para tar e usando o parâmetro de transformação

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
    
por 18.07.2017 / 23:32

Tags