我在RHEL 5系统上有一个Bash脚本,用于在服务器和许多外部系统之间执行各种安全文件传输操作。通常情况下,脚本运行正常,并使用expect生成一个ftp会话来执行像MGET这样的事情,然后从目标服务器中获取文件。但是,在成功进行MGET传输后尝试删除文件时,脚本偶尔会出现输出“无法统计远程文件:没有此类文件或目录”的错误。乍一看,此错误很简单,似乎表明该文件不存在。但脚本输出显示文件存在并已正常传输:
SFTP protocol version 3
sftp> get /home/sistran/parchment/*.xml /nfs/ftp-banp/college_xml
Fetching /home/sistran/parchment/TQB10G4D.xml to /nfs/ftpbanp/college_xml/TQB10G4D.xml
Fetching /home/sistran/parchment/TQB1343C.xml to /nfs/ftp-banp/college_xml/TQB1343C.xml
然后我的输出显示统计错误:
sftp> quit
Result of error check: 617
!SFTP - Successful File Transfer Performed.
Connecting to abc.xyz.edu...
sftp>
sftp> rm /home/sistran/parchment/TQB10G4D.xml
Couldn't stat remote file: No such file or directory
Removing /home/sistran/parchment/TQB10G4D.xml
Couldn't delete file: No such file or directory
sftp> quit
\r
在批处理操作中的许多文件的文件传输过程中,有时会发生这种情况。不幸的是,我不能在外部服务器上进行故障排除。下面是执行mget和rm的脚本片段:
....if [ "$F1" = "$ftp_success_string" ]; then
if [ "$password_option" = "1" ]; then
# ----- SFTP command here (password) -----
/usr/bin/expect - << EOF
spawn /usr/bin/sftp -oPort=$PORT $userid@$dest
expect "assword: "
send "${send_password}\r"
expect "sftp> "
send "rm $F2\r"
expect "sftp> "
send "bye \r"
EOF
err=$?
else
# ----- SFTP command here (public Key) -----
echo "
rm $F2
quit
"|sftp -oPort=$PORT -oPubkeyAuthentication=yes $userid@$dest 2>&1
fi....
帮助!如果有更好的方法,我也愿意不使用expect。