Shell-Script

嘗試為 Rsync 創建一個 cron 然後 tar 文件夾

  • April 5, 2019

我被困在第一個障礙!

我想從 bash 腳本執行幾個命令。首先像這樣來同步一些目錄:

rsync -e ssh -az user-whatever@website.com:/home /location/of/local/folder

然後像這樣將文件 tar 並複製到其他地方:

cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home

我希望這是有道理的。

問題是,顯然我希望 rsync 在目錄被 tar 之前完成。tar那麼在執行命令之前,我可以使用一些程式碼來確保 rsync 已經完成嗎?

例如(虛擬碼)

rsync
while(is syncing){
   sleep 10
}
tar

還是我的.sh腳本只會在第一行完成並退出後才執行下一行?

shell 腳本中的命令是按順序執行的。如果您的第一個命令是rsync,則下一個命令在完成之前不會執行rsync

您要確定的是rsync在繼續執行下一個命令之前成功完成。

這不是最優雅的解決方案,但最容易實現。

rsync -e ssh -az user-whatever@website.com:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder

請記住,這僅在退出狀態為時才rsync有效0。任何其他退出狀態和命令 2 都不會執行。

AND 和 OR 列表是由 && 分隔的多個管道之一的序列
和 || 分別控制操作員。執行 AND 和 OR 列表
具有左結合性。AND 列表具有以下形式
命令1 && 命令2
當且僅當 command1 返回退出狀態為零時,才會執行 command2。

如果您根據rsyncEXIT VALUES 執行不同的操作,您可以為腳本添加更多智能。

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin

rsync -e ssh -az user-whatever@website.com:/home /location/of/local/folder

if [ $? != "0" ]
 then
  echo "There was a problem"
 else
  tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
fi

引用自:https://unix.stackexchange.com/questions/37912