
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.gz
server2からアーカイブを抽出するには、アーカイブを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"