2017-10-02 7 views
1

私は2台のマシン間で毎日のファイル転送をbashスクリプトにしようとしています。スクリプトはターゲットマシン上で実行され、ソースマシンからファイルを取得します。ソースマシンにはファイルが準備されていないことがありますが、これは問題ありません。SFTP/SCPで特定のエラー条件を無視するファイル転送

正常に転送された場合、および転送可能なファイルがない場合、スクリプトを0にすることをお勧めします。他の障害状態(接続性など)でスクリプトが0以外の値を終了したい。

私は以下の2つのアプローチを試みました。私はSCPで実際のエラーが何であってもリターンコードは常に1であることがわかったので、許容できるエラー状態とスクリプトを区別するのは難しいです。

sftpメソッドは、コマンドの実行中にも常に0を返します。助言がありますか?あなたはおそらくの存在をテストするためにリモートから任意のコードを実行することができますので、あなたは明らかに、パスワードなしでscpコマンドを実行している けど - 私はこれを検証していない

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 $? 
} 

答えて

0

、それが実際に何をしたいないことを確認してくださいファイル。ちょっと注意してください。

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 
} 
+0

Paulさん、本当にありがとうございました。さらに、私はファイルが最初にあるかどうかを確認しています。それ以外の場合はスクリプトの残りを中断しています。 – Brad87

+0

喜んで助けてください。 :) –

関連する問題