Como eu canalizo os arquivos baixados com o wget através do tar?

2

Eu gostaria de enviar tarballs ( .tar.gz arquivos neste caso) Eu faço o download com o GNU Wget ( wget ) através de tar -xzf (para descompactá-los, se isso não estiver claro), mas não sei como. Eu tentei:

wget -q -O- ${SRC_URI} | tar -xzf > ${DESTDIR}

e

wget -q -O- ${SRC_URI} | 'tar -xzf' > ${DESTDIR}

e

wget -q -O- ${SRC_URI} | 'tar -xzf' > ${DESTDIR}

nem sequer chegou perto de fazer o que eu quero. Eu também tentei omitir o componente de saída > ${DESTDIR} e apenas deixar tar extrair o conteúdo do tarball da maneira que ele faz por padrão. Cada tentativa geralmente retornou um erro como:

tar: option requires an argument -- 'f'

antes de baixar o tarball, ou nada além disso, eu verificaria se o caminho definido por ${DESTDIR} havia sido criado (já que eu estava deixando tar para gerá-lo) e não tinha.

    
por Brenton Horne 30.10.2015 / 12:52

2 respostas

5

Como você está extraindo um arquivo tar.gz do stdin, você não precisa especificar a opção f , tar é o padrão de leitura do stdin.

Supondo que você queira extrair o conteúdo para $ DESTDIR, você também precisa usar a opção tar (alterar diretório) do GNU -C .

Eu também coloquei " aspas em torno das variáveis, no caso de $ SRC_URI ou $ DESTDIR conterem quaisquer espaços ou meta-caracteres shell - & , * , ? e similares.

Por fim, as chaves {} em torno das variáveis não são estritamente necessárias aqui, mas deixei-as assim mesmo - elas certamente não causam nenhum dano.

Juntando tudo isso, você recebe:

wget -q -O- "${SRC_URI}" | tar -xz -C "${DESTDIR}"
    
por 30.10.2015 / 12:58
1

Você precisa especificar - como o "arquivo" a ser extraído. O comando wget é enviado para STDOUT ( -O- ) e o tar precisa usar STDIN como arquivo de entrada: tar zxf - para extrair.

    
por 30.10.2015 / 12:58