ネットワーク経由でアーカイブを抽出する方法

ネットワーク経由でアーカイブを抽出する方法

2 台の Solaris サーバーがあります。 server1にファイルがありますarchive.tar.gz。ファイルを抽出するには、server2でsshする必要があります。

だから、次のコマンドを作成します。

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

しかし、エラーが発生します。

stdin が端末ではないため、疑似端末は割り当てられません。

ファイルを正しくコピーする方法は?

答え1

私はあなたが次のことをすることができると信じています:

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

server2から抽出されるディレクトリを制御する必要がある場合:

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

ソラリス

お客様は Solaris を使用しているため、tar バージョンには GNU tar が提供する圧縮機能が含まれていない場合があります。心配しないでください。このコマンドは引き続き実行できます。archive.tar.gzまず、タールボールを解凍できるコマンドでcatを分解するだけです。

次のようにする必要があります。

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

またはこれ:

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

またはこれ:

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

答え2

ssh server2 < archive.tar.gz

どのコマンドも渡さないので、sshリモート側でシェルを実行します。の内容はarchive.tar.gz標準入力を介してシェルに渡されるため、これをシェルスクリプトに解析しようとします。愉快さを引き起こすかどうかは、ファイルの内容によって異なります。

これらのコマンドを実行する場所は説明では明確ではありません。 server1にあり、archive.tar.gzserver2からアーカイブを抽出するには、アーカイブをserver2にパイプし、そこからextractコマンドを実行します。

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

または、server2にログインしてserver1のファイルシステムをマウントします。sshfsをクリックし、ローカルファイルのようにアーカイブを解凍します。

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

答え3

cd次のコマンドを使用せずに、アーカイブを既存の特定のディレクトリに拡張できます。

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

ディレクトリが存在するかどうかわからない場合は、次のコマンドを使用できます。

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

関連情報