Todos os arquivos não estão sendo baixados pelo script SFTP

1

Eu tenho um script de arquivo sftp com detalhes abaixo, minha pasta do servidor como BCP11,BCP12,BCP13,BCP14.....BCPXX . Em qual BCPDUMP pasta tem arquivos.

Nome do arquivo: file_sftp.sh

#!/usr/bin/expect
spawn sftp [email protected]
expect "[email protected]'s password:"
send "password\n"
expect "sftp>"
send "get *Backup/GetBackup/BCP*/*BCPDUMP/20150925/20150925_profile*\n"
expect "sftp>"
send "bye\n"

Quando executo este script, estou obtendo apenas um arquivo enquanto o servidor tem aproximadamente 12 arquivos. Estou ficando abaixo do resultado do script.

spawn sftp [email protected]  
Connecting to xx.xxx.x.xxx...  
Password:  
sftp> get *Backup/GetBackup/BCP*/*BCPDUMP/20150925/20150925_profile*  
Couldn't get handle: No such file or directory^M  
Couldn't get handle: No such file or directory^M  
Couldn't get handle: No such file or directory^M  
Fetching   /rsi/Backup/GetBackup/BCP10/BCPDUMP/20150925/20150925_profile_410.list.Z to 20150925_profile_410.list.Z
^M/rsi/Backup/GetBackup/BCP10/BCPDUMP/20150925/20150925_profile_410.list.Z 0%    0     0.0KB/s   --:-- ETA^M/rsi/Backup/GetBackup/BCP10/BCPDUMP/20150925/20150925_profile_410.list.Z                                                           66% 1152KB   1.1MB/s   00:00 ETA^M/rsi/Backup/GetBackup/BCP10/BCPDUMP/20150925/20150925_profile_410.list.Z                                                          100% 1730KB 864.9KB/s   00:02  
    
por user3548033 25.09.2015 / 12:53

4 respostas

1

Tente esta construção quando command é demorado:

send "command\r"
expect { 
    timeout { 
        puts "Running..." 
        exp_continue 
    } 
    "%PROMPT%" { 
        puts "Finished." 
    } 
}
send "next command\r"

Em timeout , você aguardará continuamente com o comando exp_continue para %PROMPT% .

    
por 28.09.2015 / 16:10
1

Como você está tentando recuperar diretórios, use get -r . Tente com isso.

    
por 25.09.2015 / 13:31
1

Tente usar este caractere para todos (*) apenas uma vez por linha, se você já conhece os nomes dos diretórios BCP * e * BCPDUMP.

Se você acha que não é uma boa idéia digitar os nomes dos diretórios em linhas diferentes, você pode usar o comando ls para listar todos os diretórios e colocá-los em uma matriz, depois disso você fará o download de todos os arquivos disponíveis para cada valor de array. que é diretório diferente ou caminho diferente.

    
por 25.09.2015 / 15:25
0

Eu não entendo porque você está usando esperar.

Use este segmento de código no seu script de shell ...

 ftp -i -n ftp.somehost.com  <<-EOF
   user somelogin somepassword
   mget *
   bye
   EOF

Note que cada uma das linhas (usuário, mget, bye, EOF) começa com um caractere "tab".

Observe também que, se você estiver obtendo um conjunto específico de arquivos (desde que seja maior que dois arquivos)

 mget file1 file2 file3 file4 ... filen
    
por 27.09.2015 / 01:26