extraire quelques membres des archives tar et canaliser via le réseau

9

modifier: je veux extra member01et member02et répertoireblah/

tarball_1.tar.gzcontient un répertoire test/avec 20 fichiers. Je veux extraire uniquement les membres test/member01et les test/member02répertoires blah/et les copier dans un autre "remote_host" en utilisant ssh / scp.

Est-ce que cela peut être fait en une seule ligne? J'ai envisagé d'utiliser tar, paxou, cpiomais je suppose que je ne suis pas encore très compétent avec ces utilitaires.

Felipe Alvarez
la source

Réponses:

15
tar -xzOf file.tar.gz file_you_want_to_extract | ssh user@host 'cat > /path/to/destination_file'
  • -x : Extrait
  • -z : Par gzip
  • -f : Prenez un fichier comme entrée.
  • -O : Extraire vers stdout

Le file_you_want_to_extractest extrait de file.tar.gzla sortie standard, canalisé vers ssh, qui s'exécute catsur l'hôte distant et écrit son standard dans la télécommande destination_file. Bien sûr, vous devez vous assurer que vous disposez d'une autorisation d'écriture sur le fichier de destination souhaité sur l'hôte distant.

atanamir
la source
Je n'étais pas clair dans mon message d'origine :) J'ai besoin d'extraire plus d'un membre, plus un répertoire.
Felipe Alvarez
devrait être tar -xz0f: après fvient le nom de l'archive
Felipe Alvarez
1
L'extraction de plusieurs membres deviendra compliquée si vous voulez qu'ils soient à une seule ligne, car l'extraction de plusieurs fichiers vers stdout n'a pas vraiment de sens. Vous devrez probablement le faire tarpour chacun que vous souhaitez extraire, puis utiliser scp -r member1 member2 blah user@host:/destination/folder/pour les copier. Si vous voulez vraiment le rendre sur une seule ligne, vous pouvez concaténer toutes ces commandes avec &&. Une option plus pratique consiste simplement à créer un script qui parcourt les options de ligne de commande et s'exécute tarpour chacune d'entre elles, puis scptoutes à la fin.
atanamir
ahhhhh, je vois. Il n'y a donc pas de méthode «simple» à une ligne. Merci :-)
Felipe Alvarez
2
Alternativement, si "one-liner" est plus important que "combien de temps cela prend", vous pouvez diriger toute l'archive via ssh et extraire les membres que vous voulez de l'autre côté "cat file.tar.gz | ssh user @ host ' tar zxvf file1 file2 dir1 '
Colin