使用SFTP / SCP文件传输忽略特定的错误条件

时间:2017-10-02 17:10:15

标签: bash sftp scp

我试图在两台机器之间压缩脚本每日文件传输。该脚本在目标计算机上运行,​​并从源计算机中提取文件。有时,源计算机没有准备好文件,这是可以接受的。

我希望脚本在成功传输时退出0,并且当没有可用文件传输时。我希望脚本在任何其他故障条件(连接等)上退出非0。

我尝试了以下两种方法,我发现SCP无论实际错误是什么,返回代码总是1,因此脚本难以区分我可接受的错误条件和其他错误条件。

无论命令发生什么,sftp方法似乎总是返回0。有什么建议?

scpGet(){
  echo "Attempting File Transfer"
  scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH
  echo $?
}
sftpGet(){
cd $LOCALPATH
sftp -P $REMOTEPORT $REMOTEHOST << EOF
get $REMOTEPATH
quit
EOF
echo $?
}

1 个答案:

答案 0 :(得分:0)

我还没有对此进行验证,所以请检查它实际上是否符合您的要求 - 但是你显然没有密码运行scp,所以你可以远程执行任意代码来测试文件是否存在。小心点。

scpGet() {
  echo "Attempting File Transfer"
  if scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH
  then echo "$( ls -l $LOCALPATH) - successfully retrieved"
  elif ssh -P $REMOTEPORT ls -l $REMOTEHOST:$REMOTEPATH
  then echo "$REMOTEHOST:$REMOTEPATH exists, but I can't retrieve it!" >&2
       exit $oopsieCode 
  elif (( 2 == $rc )) # ls failed to find the file - verify this code
  then echo "File not ready. Ignoring."
  else : handle errors other than "not found"
  fi
}