使用rsync備份文件/目錄

jopen 10年前發布 | 11K 次閱讀 rsync Linux

 

本文我們介紹一個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</pre>

運行帶有輸出結果的腳本

[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</pre>

運行第二個帶有輸出結果的腳本的屏幕截圖

使用rsync備份文件/目錄

希望這些腳本對你備份會有幫助!!


via: http://linoxide.com/linux-shell-script/shell-script-backup-files-directories-rsync/

作者:Yevhen Duma 譯者:GOLinux 校對:wxy

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

來源: https://linux.cn/article-5694-1.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!