Como extrair o arquivo via rede

6

Eu tenho dois servidores Solaris. No server1 eu tenho um arquivo, archive.tar.gz . Eu preciso extraí-lo usando ssh para server2.

Então, eu escrevo os comandos:

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

Mas recebi um erro:

Pseudo-terminal will not be allocated because stdin is not a terminal.

Como copiar o arquivo corretamente?

    
por sluge 11.09.2013 / 08:41

3 respostas

11

Eu acredito que você poderia fazer algo assim:

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

Se você precisa controlar o diretório de onde é extraído para o server2:

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

Solaris

Considerando que você está no Solaris, sua versão do tar provavelmente não incluirá nenhum dos recursos de compactação que o GNU tar oferece. Não tenha medo, você ainda pode fazer esse comando, só precisamos decompor o cat archive.tar.gz em um comando que pode primeiro descompactar o tarball.

Algo como isso deve ser feito:

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

Ou isto:

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

Ou isto:

$ gunzip sample.tar.gz | ssh server2 " cd /path/to/dir; tar xvf -"
    
por 11.09.2013 / 08:54
1
ssh server2 < archive.tar.gz

Você não está passando nenhum comando para ssh , portanto, ele executa um shell no lado remoto. O conteúdo de archive.tar.gz é passado para esse shell em sua entrada padrão, portanto, ele tenta analisá-lo como um script de shell. Hilaridade pode acontecer, ou não, dependendo do conteúdo do arquivo.

Não está claro em sua descrição onde você está executando esses comandos. Se você estiver no servidor1, tenha archive.tar.gz no servidor1 e queira extrair o arquivo no servidor2, em seguida, envie o arquivo para o servidor2 e execute o comando de extração lá.

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

Como alternativa, faça o login no server2, monte o sistema de arquivos do server1 através do sshfs e descompacte o arquivo como você d descompacte um arquivo local.

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

Você pode expandir o arquivo para um diretório existente específico sem usar o comando cd da seguinte forma:

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

Se você não sabe se o diretório sai, você pode usar isto:

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

Tags