Comment compresser un répertoire, le transférer via scp et décompresser en une seule commande?

11

Je transfère fréquemment des répertoires volumineux scpet ce serait bien si je pouvais en quelque sorte compresser le répertoire, l'envoyer et le décompresser tout en un.

Est-ce que quelque chose comme ça est possible?

macek
la source

Réponses:

29

Que diriez-vous d'utiliser à la rsyncplace avec l' -zoption activée pour la compression?

rsync -az --progress source_dir/* remote_host:/destination_dir

Cela a également l'avantage supplémentaire que si le fichier existe déjà et n'a pas changé sur la destination, il ne sera pas transféré.

AaronM
la source
7

Grâce à la réponse de @ johnshen64, j'ai pu trouver quelque chose d'assez sympa

tar -zc path/to/source | ssh user@remote tar -zxC path/to/destination

Malheureusement, cela ne montre pas de progrès lors de son transfert. J'ai remarqué des améliorations de vitesse incroyables en utilisant cette méthode.

Si quelqu'un sait comment montrer la progression d'un transfert comme celui-ci, j'apprécierais grandement l'aide :)

macek
la source
1
Insérez pventre tar et ssh .
user1686
C'est génial si vous n'avez pas rsync disponible
Simon Hartcher
2

eh bien, j'utiliserais plutôt du goudron

tar cf - répertoire | serveur ssh 'tar xf -'

vous pouvez ajouter v pour vérifier.

zip devrait être le même, mais tar est plus robuste pour linux à mon avis.

johnshen64
la source
+1 merci pour votre aide; cela m'a conduit à mi-chemin. J'ai pu trouver une solution qui n'utilise pas le -caractère cryptique , utilise également la compression gzip et permet de cibler un répertoire de destination.
macek
@macek: Notez que cela f -peut être requis sur d'autres systèmes d'exploitation, car la plupart des versions tar essaieront autrement de lire à partir d'un lecteur de bande. La lecture de stdin par défaut est spécifique à GNU.
user1686