Eu gostaria de baixar e extrair um arquivo em um determinado diretório. Aqui está como eu tenho feito isso até agora:
wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2
Em vez disso, gostaria de baixar e extrair o arquivo em tempo real , sem ter o tar.gz
gravado no disco. Eu acho que isso é possível canalizando a saída de wget
para tar
e dando tar
um alvo, mas na prática eu não sei como juntar as peças.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
trabalhou em gnu tar.Outra opção é usar o
curl
que escreve no stdout por padrão:fonte
curl -s some_url | tar xvz - -C /tmp
$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Este oneliner faz o truque:
breve explicação: o lado direito entre parênteses é executado primeiro (
-q
diz ao wget para fazê-lo silenciosamente,-O -
é usado para gravar a saída em stdout).Em seguida, criamos um pipe nomeado usando o operador de substituição de processo do Bash
<(
para criar um pipe nomeado . Dessa forma, criamos um descritor de arquivo temporário e, em seguida, direcionamos o conteúdo desse descritor para tar usando o<
operador de redirecionamento de arquivo.fonte