Ein Verzeichnis mit tar / gz über SSH auf den lokalen Computer komprimieren?

14

Ich möchte im Wesentlichen ein Verzeichnis auf einem Remotecomputer tar / gz und die Datei auf meinem lokalen Computer speichern, ohne von diesem Remotecomputer aus eine Verbindung zu meinem lokalen Computer herstellen zu müssen. Gibt es eine Möglichkeit, dies über SSH zu tun? Die TAR-Datei muss nicht auf dem Remote-Computer gespeichert werden, sondern nur auf dem lokalen Computer. Ist das möglich?

Naftuli Kay
quelle

Antworten:

25

Sie können dies mit einem ssh-Befehl tun, indem Sie einfach angeben tar, dass das Archiv auf der Standardausgabe erstellt werden soll:

ssh remote.example.com 'cd /path/to/directory && tar -cf - foo | gzip -9' >foo.tgz

Ein anderer Ansatz, der praktischer ist, wenn Sie viele Dateimanipulationen auf dem anderen Computer ausführen möchten, aber für eine einmalige Archiverstellung überflüssig sind , besteht darin, das Dateisystem des Remotecomputers mit SSHFS (einem FUSE- Dateisystem) bereitzustellen. Sie sollten die Komprimierung auf SSH-Ebene aktivieren.

mkdir ~/net/remote.example.com
sshfs -C remote.example.com:/ ~/net/remote.example.com
tar -czf foo.tgz -C ~/net/remote.example.com/path/to/directory foo
Gilles 'SO - hör auf böse zu sein'
quelle
3
Ich bin nur neugierig, warum empfehlen Sie tar -cf - foo | gzip -9statt tar -czf - foooder tar -cz foo?
Patrick
@Patrick Etwas portabler, z. B. unter Solaris.
Gilles 'SO- hör auf böse zu sein'
Würden Sie so freundlich sein, alle Argumente zu beschreiben?
Rootical V.
3
@RooticalV. tar -cf - fooErstellt ( -c) Archiv auf der Standardausgabe ( -f -) aus Datei foo. gzip -9Verwendet die beste (langsamste) Komprimierungsmethode. Wenn Sie sich nicht interessieren, können Sie einfach verwenden ssh remote.example.com tar cz /path/to/directory/foo > foo.tar.gz.
Arekolek
-1

So kopieren Sie ein Verzeichnis oder eine Datei auf einfache Weise, indem Sie sie nur für den Transport komprimieren:

$ ssh domain.net 'ls foo'
file1   file2

$ ssh domain.net 'tar czf - foo' | tar xz

$ ls foo
file1   file2
Pierre de LESPINAY
quelle
1
Dadurch wird das tarArchiv nicht auf dem lokalen Computer gespeichert , was beabsichtigt war.
Kusalananda
1
Dies ist für Leute, die auf diese Frage stoßen (wie ich), wenn sie nach einer Möglichkeit suchen, etwas durch SSH mit Komprimierung zu kopieren. Es gibt nur diesen Zusatz tar xzaus der Pipe mit einem einfacheren und besser lesbaren Beispiel.
Pierre de LESPINAY