Me gustaría descargar y extraer un archivo en un directorio determinado. Así es como lo he estado haciendo hasta ahora:
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
En cambio, me gustaría descargar y extraer el archivo sobre la marcha , sin tener que tar.gz
escribirlo en el disco. Creo que esto es posible canalizando la salida de wget
to tar
y dando tar
un objetivo, pero en la práctica no sé cómo juntar las piezas.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
trabajó en gnu tar.Otra opción es usar
curl
qué escrituras en stdout por defecto:fuente
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 hace el truco:
breve explicación: el lado derecho del paréntesis se ejecuta primero (
-q
le dice a wget que lo haga en silencio,-O -
se usa para escribir la salida en stdout).Luego creamos una tubería con nombre utilizando el operador de sustitución de proceso de Bash
<(
para crear una tubería con nombre . De esta manera, creamos un descriptor de archivo temporal y luego dirigimos el contenido de ese descriptor a tar utilizando el<
operador de redirección de archivos.fuente