Usando o mget para baixar vários arquivos do sftp

2

Eu tenho um código R e, em uma parte, estou me conectando a um sftp e tentando baixar alguns arquivos. Os arquivos que precisam ser baixados são determinados pelo código R e podem ser apenas um ou vários. Estou tentando usar mget para baixar os arquivos, mas parece que não está funcionando:

sftp> mget abc.PDF  def.PDF ghi.PDF
Fetching /abc.PDF to def.PDF

Ele está baixando apenas o abc.PDF e armazenando-o como def.PDF no diretório local, em vez de baixar todos os três arquivos. O que eu estou fazendo worng?

    
por ytk 08.12.2016 / 23:58

2 respostas

3

mget trabalha com um glob para a porção "arquivo de origem" dos argumentos (pelo menos no OpenSSH versão 7.3):

sftp> ls *.pdf
foo.pdf                   bar.pdf                   
sftp> mget *.pdf
Fetching /home/jdoe/bar.pdf to bar.pdf
Fetching /home/jdoe/foo.pdf to foo.pdf
sftp> 

Em vez disso, você precisará fazer o loop dos arquivos de alguma forma e buscá-los um a um, se um glob obtiver muitos.

    
por 09.12.2016 / 00:20
3

Não funciona porque o sftp do OpenSSH não suporta isso. É mget é o mesmo que get (na verdade, mget nem é documentado em help ou a página de manual) e usa apenas um argumento de nome de arquivo remoto (embora esse argumento possa ser um glob).

Portanto, para usar o cliente OpenSSH SFTP, você precisará emitir um get por arquivo. Como alternativa, você poderia usar um cliente SFTP diferente (por exemplo, lftp tem um mget que funciona como você deseja). Ou (graças a Gilles pelo lembrete) você pode achar mais conveniente usar o sshfs (via FUSE) e então usar comandos normais de cópia de arquivo ( cp , ou o que o R embutiu).

    
por 09.12.2016 / 00:17

Tags