1. 程式人生 > >使用rsync備份與同步文件

使用rsync備份與同步文件

格式 delet pre 可靠 文件 內容 保持數據 時代 著名

在數字化時代的今天,隨著個人擁有的數據量急劇增加,對其中的重要數據進行備份以保證其安全性、正確性變得越來越重要。同時,由於在公司、實驗室、家裏、外出等不同環境下往往使用不同的電腦設備(如臺式機、筆記本)與存儲介質(如移動硬盤、U盤),在多臺電腦以及存儲介質之間保持數據的同步和一致也成為越來越頻繁且麻煩的操作,以至於靠人工辯別與手動操作變得不再可能。因此,能夠有一款工具軟件能夠自動、高效、穩定地完成上述數據備份和同步操作就變得極其必要。以往,我曾使用過Total Commander自帶的同步功能以及微軟推出的小工具SyncToy,雖然圖形化的操作很容易上手,但是性能差強人意。當數據量達到1TB以上時,就會出現程序卡死的情況。因此,它們無法滿足我目前的需求。而GNU/Linux下著名的rsync

命令以其高性能、可靠性、靈活性,則完全可以勝任這樣的工作,而且即使數據量再大也毫無問題。在同步的過程中,rsync通過比較文件內容,僅傳輸差異部分,因而速度很快。同時,rsync在傳輸文件時始終都做md5校驗,所以非常可靠安全,使用者不用擔心文件內容出錯的問題。再者,rsync既可以通過不同的外設接口將數據同步至連接到本機的移動存儲設備上,也可以經由網絡以SSH的方式與其他電腦進行數據交換,因而同步方式非常靈活。接下來,本文對rsync的常用命令行參數與過濾器予以簡要介紹。更細節的問題則可以參考使用手冊。

常用命令行參數

  • -r, --recursive: 遞歸同步目錄。
  • -t, --times: 保留文件修改時間。
  • -l, --links: 拷貝符號鏈接。默認情況下,rsync對符號鏈接不作任何處理。要想拷貝它們,就需要此選項。同時,由於被同步的整個文件樹在不同電腦上所在的絕對路徑會有不同,所以建議基於相對路徑創建軟符號鏈接。這樣一來,只要保證目錄樹本身的結構不變,軟符號鏈接在不同的電腦上均有效。
  • -v, --verbose: 在執行備份、同步的過程中顯示詳細信息。
  • -z, --compress: 傳輸文件的過程中壓縮數據。當通過網絡在兩臺電腦間直接同步數據時,最好將該選項加上。
  • -u, --update: 跳過在目的端較新的文件。這樣一來,該文件就不會被來源端的同名文件覆蓋。或者當來源端沒有該文件時,該文件亦不會被刪除。這對於在兩臺或者多臺電腦上分別創建了一些新文件然後需要將其統一合並的情況非常有用。
  • --delete: 刪除存在於目的端但不在來源端的文件。該選項可與-u, --update一起使用。
  • -i, --itemize-change: 輸出文件改動匯總報告。
  • --exclude: 定義一條文件排除規則。命令行上可以出現多個該選項。
  • --exclude-from=FILE:指定從配置文件FILE讀取排除規則。
  • --include: 定義一條文件包含規則。命令行上可以出現多個該選項。
  • --include-from=FILE:指定從配置文件FILE讀取包含規則。
  • -n, --dry-run: 只輸出將要進行的具體的同步操作而不實際執行。

過濾器

可以在配置文件中或者直接在命令行上定義一組文件名匹配過濾規則,用於包含和排除需要同步的文件。對於每一個待同步的文件,第一個被匹配的規則生效。如果沒有遇到任何匹配,則該文件被默認包含在同步操作中。

過濾器規則格式

RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]

過濾器規則前綴

exclude, - specifies an exclude pattern.
include, + specifies an include pattern.
merge, . specifies a merge-file to read for more rules.
dir-merge, : specifies a per-directory merge-file.
hide, H specifies a pattern for hiding files from the transfer.
show, S files that match the pattern are not hidden.
protect, P specifies a pattern for protecting files from deletion.
risk, R files that match the pattern are not protected.
clear, ! clears the current include/exclude list (takes no arg)

在配置文件中指定過濾器

  • 空白行被忽略。
  • #用於註釋行。
  • 每一行為一條規則。

之後在rsync命令行上使用--exclude-from或--include-from選項,加載配置文件。

在命令行指定過濾器

  • 每一個--include--exclude選項只能定義一條規則,但是可以定義多個。
  • 只支持include、exclude和clear三種規則。

模式匹配

  • 模式不包含任何前綴:可以匹配被遍歷文件樹的任何位置。

  • 模式以/開頭:從待傳輸文件樹的根目錄開始匹配。

  • 模式以/結尾:僅匹配文件夾,而不匹配普通文件、符號鏈接或設備文件。

  • 模式可以包含*?[通配符。

    • *可以匹配除了/之外的任何路徑名。
    • **可以匹配任何路徑名,包括/
    • 可以匹配除了/之外的任何單個字符。
    • [用於定義字符集,如[a-z]

修飾符

  • /: 用於指定使用操作系統絕對路徑匹配。
  • !: 當模式不匹配時規則生效,即對原規則邏輯取反。

註意與說明

  • 如果父文件夾未被包括在同步文件列表內的話,其所包含的文件與子文件夾也不會被同步。

  • 當模式字符串中用到了通配符時,若需要寫出某個通配符所代表的原字符,便需要使用反斜線轉義。如果在模式字符串中只用到通配符的原義字符,則無需反斜線轉義。

使用rsync備份與同步文件