SFTP 脚本未下载所有文件

SFTP 脚本未下载所有文件

我有一个 sftp 文件脚本,其中包含以下详细信息,我的服务器文件夹如BCP11,BCP12,BCP13,BCP14.....BCPXX.哪个文件夹里BCPDUMP有文件。

文件名 : 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"

当我执行这个脚本时,我只得到一个文件,而服务器有大约 12 个文件。我收到以下脚本输出。

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  

答案1

由于您正在尝试检索目录,因此您应该使用get -r.尝试一下。

答案2

如果您已经知道目录 BCP* 和 *BCPDUMP 的名称,请尝试每行仅对所有 ( * ) 使用此字符一次。

如果您认为在不同的行中输入目录名称不是一个好主意,您可以使用命令ls列出所有目录并将它们放入一个数组中,之后您将为每个不同目录或不同的数组值下载所有可用文件小路。

答案3

command当耗时时尝试这个构造:

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

timeout将继续等待exp_continue命令%PROMPT%

答案4

我不明白你为什么使用expect。

在您的 shell 脚本中使用此代码段...

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

请注意,每一行(user、mget、bye、EOF)均以“制表符”字符开头。

另请注意,如果您正在获取一组特定的文件(前提是它大于两个文件)

 mget file1 file2 file3 file4 ... filen

相关内容