Gzip Piped para Rsync

2

Eu quero fazer algo como gzip um arquivo e, em seguida, rsync imediatamente para outro servidor para que o arquivo gzip criado não seja gravado no servidor local. Eu estava pensando em fazer algo assim ... mas obviamente isso falha.

arquivo gzip | rsync -auv outro_servidor

Alguém tem alguma ideia sobre isso? Ou isso é possível?

    
por bichonfrise74 16.07.2009 / 01:10

5 respostas

5

Minha abordagem usual para isso seria usar o gzip e o ssh da seguinte forma:

gzip -c arquivo | ssh [email protected] "cat > destination.gz"

Isso enviará a saída do zip sobre o ssh diretamente para o arquivo "destination.gz" no host remoto. Se você estiver fazendo isso manualmente, basta digitar sua senha ssh; Se você quiser fazer isso automaticamente, você precisará configurar chaves ssh, por algo assim:

link

    
por 16.07.2009 / 01:32
5

Não leve isso para o lado pessoal, mas a partir da sua pergunta e comentários, parece que você não entende o que o rsync é realmente para . Não é para mover arquivos de um lugar para outro - é para sincronizar arquivos entre dois lugares. Se você não quiser manter uma cópia na máquina local, você não está sincronizando e o rsync não é a ferramenta que você deseja.

Você está tentando transferir um arquivo. Para isso, você pode colocá-lo em disco e usar ssh, ftp, sftp, ftps e assim por diante, ou pode canalizá-lo pelo ssh como Glenn sugeriu, que é a resposta certa e a única maneira correta de fazer o que você quer. Se você está preocupado com a utilização de recursos (e para conexões de alta largura de banda isso pode fazer a diferença), então altere as cifras:

gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'

Se você tentar fazer alguma coisa (como canalizar para rsync) e não funcionar, é possível que você esteja fazendo errado, ou é possível que você esteja tentando fazer a coisa errada. É uma questão de ferramenta para o trabalho, e é importante não descartar que, seja o que for que você esteja tentando fazer, há uma ferramenta adequada para isso.

Entendendo e tendo em mente o propósito das diversas ferramentas disponíveis em um ambiente UNIX, você poderá usar e manipular esse ambiente de maneira mais eficaz. Muitas ferramentas têm diferenças sutis ou se sobrepõem à funcionalidade, mas, a menos que você preste atenção a todas elas, perderá muitas das melhores maneiras de realizar tarefas.

    
por 16.07.2009 / 03:25
3

O rsync provavelmente não oferecerá benefícios nesse caso, já que o conteúdo que está enviando será exclusivo.

Compactar um arquivo e enviar a saída para STDOUT é bastante simples:

gzip -c file > another-file

Se você está procurando velocidade e tem controle sobre ambas as extremidades, o netcat quase não tem sobrecarga.

Configure a máquina de destino para escutar, na porta 1234

user@bar$ nc -l -p 1234 > file.gz

Envie, 'file.gz', para a barra de máquina: 1234

user@foo$ gzip -c file | nc bar 1234
    
por 16.07.2009 / 01:27
1

O rsync tem uma opção -z que transfere arquivos compactados. Se você quiser fazer isso para acelerar a transferência, você deve usar -z em vez de mexer com o gzip.

    
por 16.07.2009 / 14:59
0

A combinação de gzip e rsync não funciona.

Se você enviar o arquivo descompactado, o rsync funcionará enviando apenas os bits que foram alterados. Mas quando você gzip um arquivo, o arquivo resultante será significativamente diferente a cada vez. Pipá-lo para rsync teria, na melhor das hipóteses, um resultado semelhante ao ssh e poderia até ser pior.

A razão pela qual um arquivo compactado é diferente a cada vez é porque ele faz o perfil dos dados antes da compactação. Isso significa que até mesmo uma pequena alteração no arquivo pode significar uma alteração no perfil, afetando cada byte compactado.

    
por 16.07.2009 / 03:42

Tags