检查文件是否已通过SFTP成功传输至目的地

检查文件是否已通过SFTP成功传输至目的地

我们有一个日常流程,使用脚本通过 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)。

相关内容