Se o destinatário tiver split
, você poderá fazer isso:
tar -cvf - ~/batch/ | gzip |
ssh recipient 'cd /destination &&
split --bytes=1024m - batch.tar.gz.seg'
Estou tentando transferir vários arquivos via SCP. Alguns deles são grandes demais para serem armazenados no destinatário (telefone Android, limite de tamanho de arquivo de 4 GB).
O remetente está quase sem espaço, por isso não consigo criar arquivos intermediários localmente.
Eu gostaria de aumentar o volume e dividi-lo por meio da divisão para que eu possa obter segmentos menores que serão aceitos pelo telefone, ou seja, comando local:
tar -cvf - ~/batch/ | split --bytes=1024m - batch.tar.seg
Mas não tenho certeza de como transmitir isso ao scp para obter o telefone. De acordo com o comentário sobre este post , é possível, mas antes de tudo não entendi o que ele está dizendo, em segundo lugar eu não tenho certeza de como conseguir isso, pois haverá vários arquivos de saída da divisão.
Alguma idéia?
Enquanto o comentário que você mencionou se refere à leitura de scp e ssh do STDIN, este não é exatamente o seu caso aqui. O motivo é o split
: ele não grava em STDOUT. Portanto, mesmo que você adicione mais pipes, não obterá os dados lá. Stephane sugere a coisa certa em sua resposta acima: não armazene nada na fonte, pois tem falta de espaço livre, apenas empacote, gzip e transfira os dados; e, em seguida, faça a divisão na extremidade de recepção, onde o tamanho do bloco é importante.
Sua postagem mencionada descreve bem o problema: como você está usando um canal, não copia arquivos, mas redireciona fluxos padrão. E scp
não é a ferramenta certa para isso (é para copiar arquivos), ssh
é o programa certo: você redireciona o fluxo para ssh
entrada padrão e isso produzirá essa entrada no host remoto e o alimentará para a entrada padrão de um comando especificado:
local$ tar -cvzf - ~/batch/ | ssh target 'split --bytes=1024m - batch.tar.seg'
Observe que adicionei o sinalizador de compactação 'z' às opções tar, talvez a divisão não seja necessária.