我有一个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。
预先感谢!
答案 0 :(得分:1)
我将使用SCP而不是SFTP。 Shell返回码作为完成状态。至于下载的工件完整性,最好的方法是将md5校验和放在要下载的文件附近,并在下载完成后对其进行验证。因此,您有file.tar
和file.md5
(由md5sum file.tar > file.md5
制作)都下载并进行了验证。
如果还有其他脚本需要等到下载完成,则要处理下载的文件,最好在下载开始时创建.lock文件,然后再将其删除。处理脚本应等待.lock文件消失。