Em vez de usar o tar para gravar em seu disco local, você pode gravar diretamente no servidor remoto pela rede usando ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Qualquer sequência que segue o comando "ssh" será executada no servidor remoto em vez do logon interativo. Você pode canalizar a entrada / saída de e para esses comandos remotos através do SSH como se fossem locais. Colocar o comando entre aspas evita qualquer confusão, especialmente ao usar o redirecionamento.
Ou, você pode extrair o arquivo tar diretamente no outro servidor:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Observe a -C
opção raramente usada . Significa "mudar para este diretório antes de fazer qualquer coisa".
Ou talvez você queira "puxar" do servidor de destino:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Observe que a <(cmd)
construção é nova no bash e não funciona em sistemas mais antigos. Ele executa um programa e envia a saída para um canal e substitui esse canal no comando como se fosse um arquivo.
Eu poderia facilmente ter escrito o acima, da seguinte maneira:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
Ou da seguinte maneira:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Ou então, você pode evitar algumas mágoas e usar o rsync:
server1$ rsync -az ./path server2:/destination/
Por fim, lembre-se de que a compactação dos dados antes da transferência reduzirá sua largura de banda, mas em uma conexão muito rápida, a operação poderá levar mais tempo . Isso ocorre porque o computador pode não ser capaz de compactar rápido o suficiente para acompanhar: se a compactação de 100 MB levar mais tempo do que o necessário para enviar 100 MB, será mais rápido enviá-lo sem compactação.
Como alternativa, você pode considerar a tubulação para compactar com gzip (em vez de usar a opção -z) para poder especificar um nível de compactação. Foi minha experiência que, em conexões de rede rápidas com dados compactáveis, o uso de gzip no nível 2 ou 3 (o padrão é 6) fornece a melhor taxa de transferência geral na maioria dos casos. Igual a:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"