Transferindo um arquivo para dois destinos de maneira eficiente

1

Atualmente estou criando um arquivo de backup e usando curl para enviá-lo para um host remoto, usando:

tar -cvzf - ./folder | curl -u user:pwd ftp://example.com/folder/backup.tar.gz --ftp-create-dirs -T -

Eu também quero enviar o mesmo arquivo para um destino diferente no mesmo host (na verdade, na mesma pasta, mas com um ter um datestamp no nome do arquivo e o outro não).

Atualmente, estou apenas executando o acima (incluindo tar ) duas vezes, especificando destinos diferentes em cada um. Isto é claramente OK, mas sub-ótimo.

É possível "bifurcar" a saída de tar e enviá-la para dois comandos curl diferentes?

Ou, de forma mais eficiente, talvez em termos de largura de banda para o host remoto, transferir o arquivo para o host uma vez e depois copiá-lo in situ?

    
por drmrbrewer 10.10.2018 / 10:50

1 resposta

1

Você pode usar tee para clonar o arquivo stdout para o arquivo e depois executar o segundo curl após o primeiro ter sido concluído. Ou você pode apenas alterar os parâmetros tar para salvar o backup no arquivo local e, em seguida, executar dois processos curl para transferi-lo para o host remoto. Ambas as soluções não são muito boas em termos de largura de banda, velocidade e espaço em disco local.

Acho que a melhor solução é transferir o arquivo uma vez e copiá-lo no local. Você pode usar ssh com autenticação de chave pública em vez de curl para evitar a exposição da senha do usuário e a fácil clonagem de arquivos em host remoto:

tar -cvzf - ./folder | ssh -i ~user/.ssh/id_dsa [email protected] 'tee /folder/backup_datestamp.tar.gz | dd of=/folder/backup.tar.gz'

Você pode alterar a localização da chave privada no host local se não tiver o usuário local usuário (e não esqueça de copiar a chave pública para o host remoto para obter uma autenticação bem-sucedida). Você também pode usar dd of=file1 ; cp file1 file2 em vez de usar tee em um comando no host remoto.

    
por 10.10.2018 / 13:00

Tags