リモート->ローカルシナリオでrsyncを使用してデータを同期するスクリプトがあります。rsyncコマンドを実行した直後に、エラーコードがゼロに等しいかどうかを確認します。ゼロの場合、さらにコマンドが実行されます。ただし、これは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に出力を提供できると読みましたが、これを条件付きブロックに配置するにはどうすればよいですか?
a=$("rsync command")
。これによりrsync
コマンドが実行され、に保存さstdout
れa
ます。その後、テストを実行できますa
| grep /
または、そのようなものを追加し、でgrepの終了ステータスを確認することもでき$?
ます。出力がなかった場合は1である必要があります。
-v
そこにいるので、それはあなたが標準出力に必要な情報をすでに提供しています...例えば、実際に送信されたファイルのリスト。何も変更されなければ、それだけ./
です。