Wie kann ich ein Verzeichnis gzipen, über scp übertragen und in einem Befehl dekomprimieren?

11

Ich übertrage häufig große Verzeichnisse über scp und es wäre süß, wenn ich das Verzeichnis irgendwie komprimieren, senden und alles in einem dekomprimieren könnte.

Ist so etwas möglich?

macek
quelle

Antworten:

27

Wie wäre es mit rsync stattdessen mit dem -z Option für Komprimierung aktiviert?

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

Dies hat auch den zusätzlichen Vorteil, dass, wenn die Datei bereits vorhanden ist und sich am Ziel nicht geändert hat, sie nicht übertragen wird.

AaronM
quelle
7

Dank der Antwort von @ johnshen64 konnte ich mir etwas ganz Nettes einfallen lassen

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

Leider zeigt dies keinen Fortschritt bei der Übertragung. Ich habe mit dieser Methode unglaubliche Geschwindigkeitsverbesserungen festgestellt.

Wenn jemand weiß, wie man Fortschritte bei einer solchen Übertragung macht, würde ich mich über die Hilfe sehr freuen :)

macek
quelle
1
Einfügen pv zwischen Teer und ssh .
grawity
Dies ist großartig, wenn Sie nicht über Rsync verfügen
Simon Hartcher
2

Nun, ich würde stattdessen Teer verwenden

tar cf - verzeichnis | ssh server 'tar xf -'

Sie können v zur Überprüfung hinzufügen.

zip sollte das selbe sein, aber meiner meinung nach ist tar für linux robuster.

johnshen64
quelle
+1 Danke für Ihre Hilfe; das hat mich auf halbem Weg dorthin gebracht. Ich konnte eine Lösung finden, die das Kryptische nicht verwendet - Zeichen, verwendet auch gzip-Komprimierung und ermöglicht es, ein Zielverzeichnis anzuvisieren.
macek
@macek: Beachten Sie das f - möglicherweise auf anderen Betriebssystemen erforderlich, da die meisten Teer Versionen versuchen andernfalls, von einem Bandlaufwerk zu lesen. Das Lesen von stdin ist standardmäßig GNU-spezifisch.
grawity