Je voudrais télécharger et extraire une archive sous un répertoire donné. Voici comment je l'ai fait jusqu'à présent:
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
J'aimerais plutôt télécharger et extraire l'archive à la volée , sans avoir à l' tar.gz
écrire sur le disque. Je pense que cela est possible en filtrant la sortie de wget
to tar
et en donnant tar
une cible, mais en pratique, je ne sais pas comment assembler les éléments.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
travaillé sur gnu tar.Une autre option consiste à utiliser
curl
ce qui écrit sur stdout par défaut:la source
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
Cet oneliner fait l'affaire:
brève explication: le côté droit de la parenthèse est exécuté en premier (
-q
indique à wget de le faire tranquillement, il-O -
est utilisé pour écrire le résultat sur stdout).Ensuite, nous créons un canal nommé en utilisant l'opérateur de substitution de processus de Bash
<(
pour créer un canal nommé . De cette façon, nous créons un descripteur de fichier temporaire, puis dirigeons le contenu de ce descripteur vers tar à l'aide de l'<
opérateur de redirection de fichier.la source