So extrahieren Sie ein Archiv über das Netzwerk


8

Ich habe zwei Solaris-Server. Auf Server1 habe ich eine Datei , archive.tar.gz. Ich muss es mit ssh auf server2 extrahieren.

Also schreibe ich die Befehle:

ssh server2 < archive.tar.gz | gunzip -c | tar -xf - -C /home/

Aber ich habe einen Fehler bekommen:

Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist.

Wie kopiere ich die Datei richtig?


Fragen Sie sich, wie Sie sich bei Server1 anmelden und die Datei archive.tar.gz extrahieren und sshan Server2 senden können ?
slm

Antworten:


13

Ich glaube, Sie könnten so etwas tun:

$ cat archive.tar.gz | ssh server2 "tar zxvf -"

Wenn Sie das Verzeichnis steuern müssen, in das es auf Server2 extrahiert wird:

$ cat archive.tar.gz | ssh server2 "cd /path/to/dir; tar zxvf -"

Solaris

Wenn Sie mit Solaris arbeiten, enthält Ihre Version von tar wahrscheinlich keine der Komprimierungsfunktionen, die GNU tar bietet. Fürchte nicht, dass du diesen Befehl noch ausführen kannst, wir müssen nur die Katze archive.tar.gzin einen Befehl zerlegen, der zuerst den Tarball dekomprimieren kann.

So etwas sollte tun:

$ cat archive.tar.gz | ssh server2 "(cd /some/dir; gunzip | tar xf -)"

Oder dieses:

$ gzip -dc < sample.tar.gz | ssh server2 "cd /path/to/dir; tar xvf -"

Oder dieses:

$ gunzip sample.tar.gz | ssh server2 " cd /path/to/dir; tar xvf -"

Solaris tarversteht die xFlagge nicht. Verwenden Sie entweder gtar(GNU tar), wenn es installiert ist, oder besser tarund gunzip.
Marco

@Marco - danke Ich habe völlig vergessen, dass diese Schalter in Solaris 'Version von tar nicht vorhanden sind. Lassen Sie mich das neu formulieren.
slm

@Marco - siehe Updates.
slm

1
Warum dekomprimieren Sie vor ssh? Dies scheint besser IMO:cat archive.tar.gz | ssh server2 "(cd /some/dir; gunzip; tar xf -)"
Marco

Jede Solaris-Version wird mit g (un) zip geliefert. Die Zip-Unterstützung wird einfach nicht in tar kompiliert.
Marco

1
ssh server2 < archive.tar.gz

Sie übergeben keinen Befehl an ssh, daher wird eine Shell auf der Remote-Seite ausgeführt. Der Inhalt von archive.tar.gzwird bei seiner Standardeingabe an diese Shell übergeben, sodass versucht wird, ihn als Shell-Skript zu analysieren. Je nach Inhalt der Datei kann es zu Heiterkeit kommen oder auch nicht.

In Ihrer Beschreibung ist nicht klar, wo Sie diese Befehle ausführen. Wenn Sie sich auf Server1 befinden, sich archive.tar.gzauf Server1 befinden und das Archiv auf Server2 extrahieren möchten, leiten Sie das Archiv an Server2 weiter und führen Sie dort den Extraktionsbefehl aus.

<archive.tar.gz ssh server2 'cd /home && gunzip | tar -xf -'

Alternativ können Sie sich bei Server2 anmelden, das Dateisystem von Server1 über sshfs bereitstellen und das Archiv so entpacken, wie Sie eine lokale Datei entpacken würden.

mkdir /tmp/server1
sshfs server1:/ /tmp/server1
cd /home
gunzip </tmp/server1/path/to/archive.tar.gz | tar -xf -
fusermount -u /tmp/server1

Wow, sshfsist großartig!
Knocte

0

Sie können das Archiv in ein bestimmtes vorhandenes Verzeichnis erweitern, ohne den folgenden cdBefehl zu verwenden:

$ cat archive.tar.gz | ssh server2 "tar zxvf - -C /path/to/dir"

Wenn Sie nicht wissen, ob das Verzeichnis beendet wird, können Sie Folgendes verwenden:

$ cat archive.tar.gz | ssh server2 "mkdir -p /path/to/dir && tar zxvf - -C /path/to/dir"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.