rsyncを使用してリモート - >ローカルシナリオでデータを同期するスクリプトがあります。 rsyncコマンドを実行した直後にエラーコードが0であることを確認してください。 0 の場合、追加コマンドが実行されます。しかし、これは実際に変更せずにrsyncが正常に実行された可能性があるという事実を考慮しません。したがって、ゼロに等しい条件はとにかく実行され、これはやや重複します。
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
rsyncコマンドの実行に基づいて実際に変更があることを確認するためにこの方法を拡張する最善の方法は何ですか? -iフラグがstdoutに出力を提供できることを読みました。しかし、これを条件付きブロックにどのように配置しますか?
ベストアンサー1
私の元の質問に対するコメントに従って、-iフラグを使用して出力をstdoutにrsyncし、文字列以外のチェック条件を使用してエラーコードチェックに実際の変更があるかどうかを確認します。 rsyncコマンドを変数にラップして検証を実行できます。
RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)
if [ $? -eq 0 ]; then
# Success do some more work!
if [ -n "${RSYNC_COMMAND}" ]; then
# Stuff to run, because rsync has changes
else
# No changes were made by rsync
fi
else
# Something went wrong!
exit 1
fi
潜在的な欠点は、詳細な出力を失う必要がありますが、いつでもファイルに書き込むことができることです。