本文咱們介紹一個shell腳本,用來使用rsync命令將你本地Linux機器上的文件/目錄備份到遠程Linux服務器上。使用該腳本會以交互的方式實施備份,你須要提供遠程備份服務器的主機名/ip地址和文件夾位置。咱們使用一個單獨的列表文件,在這個文件中你須要列出要備份的文件/目錄。咱們添加了兩個腳本,第一個腳本在每次拷貝完一個文件後詢問密碼(若是你啓用了ssh密鑰驗證,那麼就不會詢問密碼),而第二個腳本中,則只會提示一次輸入密碼。linux
咱們打算備份bckup.txt,dataconfig.txt,docs和orcledb。shell
[root@Fedora21 tmp]# ls -lbash
total 12服務器
-rw-r--r--. 1 root root 0 May 15 10:43 bckrsync.shoracle
-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.txtssh
drwxr-xr-x. 2 root root 4096 May 15 10:45 docslinux運維
drwxr-xr-x. 2 root root 4096 May 15 10:44 oracledbspa
bckup.txt文件包含了須要備份的文件/目錄的詳情.net
[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
但願這些腳本對你備份會有幫助!!
免費領取兄弟連IT教育原創linux運維工程師視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/
或者勾搭Q2430675018
歡迎加入linux交流羣 478068715