私たちは、FTPを介してあるサーバーから別のサーバーにファイルを移動するためにスクリプトを使用する日常的なプロセスを持っています。以下でスニペットを見つけてください。
fileTransferToDEST()
{
ftp -inv $DEST_IP 1>$2 <<END_SCRIPT
quote USER $SRV_USER
quote PASS $SRV_PASS
lcd $4
cd $3
bi
prompt
hash
mput $1
quit
END_SCRIPT
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
FtpStatus=`grep "Transfer complete" $logpathwithfilename`
if [ "$FtpStatus" = '' -o "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
私はSFTPを使用するようにFTPスクリプトを変換することを任命されました。 SFTPでパスワードのないログインに必要なすべての手順が正常に完了しました。 SFTPを使用するためのスクリプトについては、以下をご覧ください。
fileTransferToDEST()
{
sftp $SRV_USER@$DEST_IP 1>$2 <<END_SCRIPT
lcd $4
cd $3
mput $1
quit
END_SCRIPT
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
FtpStatus=`grep "Transfer complete" $logpathwithfilename`
if [ "$FtpStatus" = '' -o "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
ただし、ファイルがターゲットに100%転送されたかどうかを確認する方法を確認できません。この目標をどのように達成できますか?
アプリケーション後のコード-b
...答えに基づいて..
fileTransferToDEST()
{
echo "mput $4/$1 $3/" | sftp -b - $SRV_USER@$DEST_IP
}
fileTransferToDEST $filename $logpathwithfilename $destinationpath $sourcepath
returnvalue=$?
if [ "$returnvalue" != "0" ]; then
echo;echo "FTP : Failed while transfering"
exit 2
fi
答え1
OpenSSHはsftp
終了コード(すでに実行したもの)を使用して結果を示します。
0を返すと、すべてが正常です。 1を返すと、何かが間違っています。
任意のメッセージの出力を解析する必要はありません。
エラーが発生した場合に中断するには、バッチモードで実行してください。使用-b -
変化そのために(-
通常は、ファイルが従うファイルを通さずに標準入力を使ってコマンドを提供したいという意味-b
)。