Shell-Script
嘗試為 Rsync 創建一個 cron 然後 tar 文件夾
我被困在第一個障礙!
我想從 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。
如果您根據
rsync
EXIT 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