我们有一个日常流程,使用脚本通过 FTP 将文件从一台服务器移动到另一台服务器。请找到下面的片段:
fileTransferToDEST()
{
ftp -inv $DEST_IP 1>$2 <<END_SCRIPT
quote USER $SRV_USER
quote PASS $SRV_PASS
lcd $4
cd $3
bi
prompt
hash
mput $1
quit
END_SCRIPT
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
FtpStatus=`grep "Transfer complete" $logpathwithfilename`
if [ "$FtpStatus" = '' -o "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
我被分配将 FTP 脚本转换为使用 SFTP。我已成功完成在 SFTP 中进行无密码登录的所有必要步骤。请在下面找到使用 SFTP 的脚本:
fileTransferToDEST()
{
sftp $SRV_USER@$DEST_IP 1>$2 <<END_SCRIPT
lcd $4
cd $3
mput $1
quit
END_SCRIPT
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
FtpStatus=`grep "Transfer complete" $logpathwithfilename`
if [ "$FtpStatus" = '' -o "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
但是我无法检查/查找如何成功检查文件是否已 100% 传输到目的地。我怎样才能实现这个目标?
申请后的代码-b
...基于答案..
fileTransferToDEST()
{
echo "mput $4/$1 $3/" | sftp -b - $SRV_USER@$DEST_IP
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
if [ "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
答案1
OpenSSHsftp
使用退出代码(您已经要做的)来指示其结果。
如果返回 0,则一切正常。如果返回1,则有问题。
无需解析任意消息的输出。
只需以批处理模式执行它,以便在出现任何错误时中止。使用-b -
转变为此(-
表示您仍然希望使用标准输入提供命令,而不是通过文件提供命令,文件通常遵循-b
)。