Linux rsync 檔案同步指令示範

在 Linux 中要複製檔案我們會使用 cp 指令,如果是不同裝置間則是使用 scp ,其實還有更強大的 rsync 指令可以使用。
rsync 指令是專門用來同步檔案的,它只會複製檔案有變更的部分,而不是複製所有檔案,可以節省許多時間。

基本語法

    
rsync [可選參數] 來源路徑 目標路徑
    

常用參數:
  • -r: 循環歷遍所有資料夾和檔案
  • -l: 複製系統連結(symlinks)
  • -p: 保留權限
  • -t: 保留修改時間
  • -g: 保留使用者群組(group)
  • -o: 保留使用者(限超級管理員)
  • -D: 保留特殊檔案(限超級管理員)
  • -a: 存檔模式,等於同時附加上面的 rlptgoD 參數
  • -z: 壓縮檔案
  • -q: 安靜模式,不顯示訊息(除非錯誤)
  • -v: 顯示詳細訊息
  • -R: 使用相對路徑
  • -d: 只有資料夾但不歷遍內部檔案和資料夾
  • -e: 指定要使用的遠端的 shell (文末會示範)

基礎示範

將 rsync-test 資料夾內的所有檔案和資料夾同步到 rsync-test-2 資料夾內,並且保留權限
    
rsync -rp rsync-test/ rsync-test-2
    

註:下面的指令和上面的指令只差在「來源路徑」後面多了一個「/」,但是會把「來源資料夾」整個放入「目標路徑」中,等於多了一層資料夾:
    
rsync -rp rsync-test rsync-test-2
    

跨 linux 同步檔案示範

假設有一個遠端 linux , 使用者名稱為 ruyut, ip 為 192.168.10.2 ,要將該使用者家目錄下的 rsync-test 資料夾複製到本機當前目錄下(可以直接使用 . 代替),指令為:
(-az 代表「存檔模式」和「壓縮檔案」)
    
rsync -az ruyut@192.168.10.2:~/rsync-test .
    

然後再輸入密碼即可。

當然,如果要反過來將本機的 rsync-test 資料夾同步到遠端 192.168.10.11 主機上 ruyut 使用者的家目錄下的 rsync-test 資料夾也是沒有問題:
(-az 代表「存檔模式」和「壓縮檔案」)
    
rsync -az rsync-test ruyut@192.168.10.11:~/rsync-test
    

這裡使用遠端主機是透過 ssh 功能達成,所以需要先開啟 ssh 功能。另外如果 ssh port 不是預設的 22 ,可以使用 -e 的方式達成(請自行替換 port):
    
rsync -az rsync-test -e'ssh -p 22' ruyut@192.168.10.11:~/rsync-test
    

留言