De-tar à travers SSH
Je fais écho au billet de GanGan, il y a quelques mois sur le Tar à travers SSH mais cette fois en inversant le procédé. C'est à dire de-tarer et gunzipper un tar.gz à travers ssh.
D'aucuns se demanderont l'utilité. Il est vrai qu'un scp suivi d'un tar xfz suffit largement et n'use que très peu les doigts. Cependant il arrive - et cela vient de m'arriver - que l'on soit limité en place sur une machine et en ce cas on comprend vite que l'on ne pourra pas utiliser la méthode traditionnelle.
Dans mon cas, j'avais un espace de 20 Gio de libre, un fichier tar.gz d'environ 8 Gio et qui, décompressé, devait prendre 14 Gio, je dépassais donc de 2Gio.
La technique est simple : ouvrez un shell sur hoteA et déplacez vous dans le répertoire où vous désirez de-tarer le contenu du tar.gz.
$ cd /home/moi/
Puis utilisez la commande suivante :
$ ssh moi@hoteB cat /tmp/fichier.tar.gz | gunzip -c | tar xf -
Explications :
- ssh moi@hoteB
se connecte sur la machine hoteB avec l'utilisateur moi.
- cat /tmp/fichier.tar.gz
exécute un cat du fichier côté hoteB et envoi le contenu (incompréhensible puisque binaire) du fichier sur la sortie standard STDOUT et donc à travers SSH.
- | gunzip -c
va décompresser à la volée le flux transmis par cat et -c l'envoi sur la sortie standard. C'est toujours incompréhensible mais c'est maintenant au format tar.
- | tar xf -
va de-tarer à la volée encore le flux issu de gunzip et l'écrire directement dans le répertoire local. Le tiret - est absolument obligatoire !!
Le seul désavantage de cette méthode est qu'il n'est pas possible de connaitre le pourcentage de copie comme avec scp, cependant pv peut déjà vous donner une indication de ce qui a été transféré, je vous laisse découvrir
$ ssh moi@hoteB cat /tmp/fichier.tar.gz | pv -b | gunzip -c | tar xf -
Article sous CC-by.