我有一个 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