Como posso fazer o paralelismo do upload de um diretório por FTP?

7

Eu preciso fazer o upload de um diretório com uma árvore bastante complicada (muitos subdiretórios, etc.) por FTP. Não consigo compactar este diretório, pois não tenho acesso ao destino além do FTP - por exemplo, sem alcatrão Como esta é uma distância muito longa (EUA = Austrália), a latência é bastante alta.

Seguindo os conselhos em Como enviar várias pastas para outro servidor usando mput no Unix? , estou usando ncftp para executar a transferência com mput -r . Infelizmente, isso parece transferir um único arquivo por vez, desperdiçando muito da largura de banda disponível na sobrecarga de comunicação.

Existe alguma maneira de paralelizar esse processo, ou seja, fazer upload de vários arquivos desse diretório ao mesmo tempo? É claro que eu poderia dividi-lo manualmente e executar mput -r em cada parte, mas esse é um processo tedioso.

Um método CLI é muito preferido, já que a máquina cliente é, na verdade, um servidor headless acessado via SSH.

    
por Bob 19.01.2014 / 14:19

2 respostas

6

O lftp faria isso com o comando mirror -R -P 20 localpath - mirror syncs between locations, e -R usa o servidor remoto como destino, com P fazendo 20 transferências paralelas de uma só vez.

Como explicado em man lftp :

   mirror [OPTS] [source [target]]

   Mirror specified source directory to local target directory. If  target
   directory ends with a slash, the source base name is appended to target
   directory name. Source and/or target can be URLs pointing  to  directo‐
   ries.


        -R,    --reverse                 reverse mirror (put files)
        -P,    --parallel[=N]            download N files in parallel
    
por 19.01.2014 / 15:49
2

Você pode tentar usar o gnu paralelo e enrolar para automatizá-lo.

você pode fazer algo como:

find . -t f -name "*.pdf" | parallel -j 4 curl -T {} ftp://ftp.site.com --user me:pass

Isso executará 4 trabalhos por cpu carregando todos os pdfs no caminho de trabalho.

    
por 22.01.2014 / 05:20