Shell-Script
如何檢查 rsync 是否對 bash 進行了任何更改?
我有一個腳本,它使用 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 標誌可以向標準輸出提供輸出,但是如何將其放置在條件塊中?
根據對我原始問題的評論,使用 -i 標誌將 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
潛在的缺點是,您必須失去詳細的輸出,但您始終可以將其記錄到文件中。