Tar canalizado para dividir canalizado para scp

6

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?

    
por DanielSmedegaardBuus 08.02.2013 / 08:06

3 respostas

4

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'
    
por 08.02.2013 / 09:10
2

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.

    
por 08.02.2013 / 09:12
2

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.

    
por 08.02.2013 / 09:28