忽略 SFTP/SCP 文件传输的特定错误条件
Ignore specific error conditions with SFTP/SCP File transfer
我正在尝试 bash 编写 2 台机器之间每日文件传输的脚本。该脚本在目标机器上运行并从源机器上拉取文件。有时源机器没有准备好文件,这是可以接受的。
我希望脚本在成功传输时退出 0,并且没有可传输的文件。我希望脚本在任何其他故障条件(连接等)下退出非 0。
我尝试了以下两种方法,我发现使用 SCP,无论实际错误是什么,return 代码始终为 1,因此脚本很难区分我可接受的错误条件和其他错误条件。
sftp 方法似乎总是 return 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 $?
}
我还没有对此进行验证,所以请检查它是否确实按照您的要求运行 -
但是你显然是 运行 没有密码的 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
}
我正在尝试 bash 编写 2 台机器之间每日文件传输的脚本。该脚本在目标机器上运行并从源机器上拉取文件。有时源机器没有准备好文件,这是可以接受的。
我希望脚本在成功传输时退出 0,并且没有可传输的文件。我希望脚本在任何其他故障条件(连接等)下退出非 0。
我尝试了以下两种方法,我发现使用 SCP,无论实际错误是什么,return 代码始终为 1,因此脚本很难区分我可接受的错误条件和其他错误条件。
sftp 方法似乎总是 return 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 $?
}
我还没有对此进行验证,所以请检查它是否确实按照您的要求运行 - 但是你显然是 运行 没有密码的 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
}