Jam*_*ite 16 rsync shell-script files
我有一个脚本,它使用 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
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法来扩展它以检查是否真的有任何基于运行的 rsync 命令的更改。我读过 -i 标志可以向 stdout 提供输出,但是如何将其放置在条件块中?
Jam*_*ite 12
根据对我的原始问题的评论,使用 -i 标志将 rsync 输出到 stdout 并使用非字符串检查条件来查看错误代码检查中是否有任何实际更改。将 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
Run Code Online (Sandbox Code Playgroud)
潜在的缺点是,您必须丢失详细输出,但您始终可以将其记录到文件中。
| 归档时间: |
|
| 查看次数: |
12326 次 |
| 最近记录: |