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

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let&apos;s Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...