Linux中國
Shell腳本:使用rsync備份文件/目錄
本文我們介紹一個shell腳本,用來使用rsync命令將你本地Linux機器上的文件/目錄備份到遠程Linux伺服器上。使用該腳本會以交互的方式實施備份,你需要提供遠程備份伺服器的主機名/ip地址和文件夾位置。我們使用一個單獨的列表文件,在這個文件中你需要列出要備份的文件/目錄。我們添加了兩個腳本,第一個腳本在每次拷貝完一個文件後詢問密碼(如果你啟用了ssh密鑰驗證,那麼就不會詢問密碼),而第二個腳本中,則只會提示一次輸入密碼。
我們打算備份bckup.txt,dataconfig.txt,docs和orcledb。
[root@Fedora21 tmp]# ls -l
total 12
-rw-r--r--. 1 root root 0 May 15 10:43 bckrsync.sh
-rw-r--r--. 1 root root 0 May 15 10:44 bckup.txt
-rw-r--r--. 1 root root 0 May 15 10:46 dataconfig.txt
drwxr-xr-x. 2 root root 4096 May 15 10:45 docs
drwxr-xr-x. 2 root root 4096 May 15 10:44 oracledb
bckup.txt文件包含了需要備份的文件/目錄的詳情
[root@Fedora21 tmp]# cat /tmp/bckup.txt
/tmp/oracledb
/tmp/dataconfig.txt
/tmp/docs
[root@Fedora21 tmp]#
腳本 1:
#!/bin/bash
# 將備份列表文件的路徑保存到變數中
backupf='/tmp/bckup.txt'
# 輸入一個提示信息
echo "Shell Script Backup Your Files / Directories Using rsync"
# 檢查是否輸入了目標伺服器,如果為空就再次提示用戶輸入
while [ x$desthost = "x" ]; do
# 提示用戶輸入目標伺服器地址並保存到變數
read -p "Destination backup Server : " desthost
# 結束循環
done
# 檢查是否輸入了目標文件夾,如果為空就再次提示用戶輸入
while [ x$destpath = "x" ]; do
# 提示用戶輸入目標文件夾並保存到變數
read -p "Destination Folder : " destpath
# 結束循環
done
# 逐行讀取備份列表文件
for line in `cat $backupf`
# 對每一行都進行處理
do
# 顯示要被複制的文件/文件夾名稱
echo "Copying $line ... "
# 通過 rsync 複製文件/文件夾到目標位置
rsync -ar "$line" "$desthost":"$destpath"
# 顯示完成
echo "DONE"
# 結束
done
運行帶有輸出結果的腳本
[root@Fedora21 tmp]# ./bckrsync.sh
Shell Script Backup Your Files / Directories Using rsync
Destination backup Server : 104.*.*.41
Destination Folder : /tmp
Copying /tmp/oracledb ...
The authenticity of host '104.*.*.41 (104.*.*.41)' can't be established.
ECDSA key fingerprint is 96:11:61:17:7f:fa:......
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '104.*.*.41' (ECDSA) to the list of known hosts.
root@104.*.*.41's password:
DONE
Copying /tmp/dataconfig.txt ...
root@104.*.*.41's password:
DONE
Copying /tmp/docs ...
root@104.*.*.41's password:
DONE
[root@Fedora21 tmp]#
腳本 2:
#!/bin/bash
# 將備份列表文件的路徑保存到變數中
backupf='/tmp/bckup.txt'
# 輸入一個提示信息
echo "Shell Script Backup Your Files / Directories Using rsync"
# 檢查是否輸入了目標伺服器,如果為空就再次提示用戶輸入
while [ x$desthost = "x" ]; do
# 提示用戶輸入目標伺服器地址並保存到變數
read -p "Destination backup Server : " desthost
# 結束循環
done
# 檢查是否輸入了目標文件夾,如果為空就再次提示用戶輸入
while [ x$destpath = "x" ]; do
# 提示用戶輸入目標文件夾並保存到變數
read -p "Destination Folder : " destpath
# 結束循環
done
# 檢查是否輸入了目標伺服器密碼,如果為空就再次提示用戶輸入
while [ x$password = "x" ]; do
# 提示用戶輸入密碼並保存到變數
# 使用 -s 選項不回顯輸入的密碼
read -sp "Password : " password
# 結束循環
done
# 逐行讀取備份列表文件
for line in `cat $backupf`
# 對每一行都進行處理
do
# 顯示要被複制的文件/文件夾名稱
echo "Copying $line ... "
# 使用 expect 來在腳本中輸入密碼
/usr/bin/expect << EOD
# 推薦設置超時為 -1
set timeout -1
# 通過 rsync 複製文件/文件夾到目標位置,使用 expect 的組成部分 spawn 命令
spawn rsync -ar ${line} ${desthost}:${destpath}
# 上一行命令會等待 「password」 提示
expect "*?assword:*"
# 在腳本中提供密碼
send "${password}r"
# 等待文件結束符(遠程伺服器處理完了所有事情)
expect eof
# 結束 expect 腳本
EOD
# 顯示結束
echo "DONE"
# 完成
done
運行第二個帶有輸出結果的腳本的屏幕截圖

希望這些腳本對你備份會有幫助!!
via: http://linoxide.com/linux-shell-script/shell-script-backup-files-directories-rsync/
作者:Yevhen Duma 譯者:GOLinux 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive
對這篇文章感覺如何?
太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
More in:Linux中國
捐贈 Let's Encrypt,共建安全的互聯網
隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
Let's Encrypt 正式發布,已經保護 380 萬個域名
由於 Let's Encrypt 讓安裝 X.509 TLS 證書變得非常簡單,所以這個數量增長迅猛。
關於Linux防火牆iptables的面試問答
Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
Lets Encrypt 已被所有主流瀏覽器所信任
旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...

















