SFTP传输完成状态

时间:2018-08-30 09:13:15

标签: unix sftp aix

我有一个SFTP代码,可以使用“期望”将文件从远程服务器获取到本地服务器。下面是我的shell脚本中的代码段。

/usr/bin/expect<<EOF
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "$USER password:"
send "$PASSWORD\r"
expect "sftp>"
set timeout -1
send "get $FILE $LOCAL\r"
expect "sftp>"
send "bye\r"
sleep 1
EOF

我的要求: 有没有办法检查转移的完成情况?

我愿意接受任何建议-根据文件大小进行检查(这是一个很好的解决方案,但是我认为sftp命令的局限性不允许比较源文件和传输文件的大小)。

或者是否可以根据返回码进行检查?如果 get 为100%,则返回0,否则返回任何非零代码。这是一种测试方法吗?我的意思是如何捕获部分转移?或网络问题?或其他预期结果 场景?

除了期望以外,我也可以使用其他解决方案。是否像在sftp批处理模式或其他sftp选项(如果有)中工作?

我正在使用AIX Unix,并且我只能使用SFTP。

预先感谢!

1 个答案:

答案 0 :(得分:1)

我将使用SCP而不是SFTP。 Shell返回码作为完成状态。至于下载的工件完整性,最好的方法是将md5校验和放在要下载的文件附近,并在下载完成后对其进行验证。因此,您有file.tarfile.md5(由md5sum file.tar > file.md5制作)都下载并进行了验证。

如果还有其他脚本需要等到下载完成,则要处理下载的文件,最好在下载开始时创建.lock文件,然后再将其删除。处理脚本应等待.lock文件消失。