rsync - 遠程同步工具
一直沒有對這個命令太有深入的理解
簡介
rsync 即 remote sync,一個遠程與本地文件同步工具。rsync 使用的算法能夠最小化所需復制的數據,因為它只移動那些修改了的文件。
rsync 是一個非常靈活的同步工具,它也是一種使用該工具的網絡協議名稱。本文中所說的 rsync 都是指同步工具,而非網絡協議。由於它在類 Unix 系統中廣為流行,它也是大多數 Linux 發行版的默認自帶工具。
基本語法
rsync 的基本語法非常簡單,類似於 ssh, scp 和 cp 命令的語法。
例如我們創建兩個目錄和一些文件:
cd ~
mkdir dir1 dir2
touch dir1/file{1..100}
現在 dir1 目錄中有 100 個空文件,一個空目錄 dir2,現在同步 dir1 目錄中的內容到 dir2:
rsync -r dir1/ dir2
-r 選項表示遞歸,這在同步目錄時非常重要。對以上操作,我們也可以用 -a 選項來實現:
rsync -a dir1/ dir2
-a 選項表示 archive,遞歸同步文件,保留符號鏈接,特殊或設備文件,修改時間,用戶組,所有人和權限。一般情況下使用 -r 就可以了。
註意
你也許已經留意到以上示例第一個參數後面的 /
符號,它表示 “dir1 的內容”。
如果沒有 /
符號,例如 rsync -r dir1 dir2
,則表示需要同步的對象包括目錄 dir1
dir2
目錄結構同步成了 dir2/dir1/[100 files]
,因此在同步之前一定要小心檢查。
要檢查 rsync 即將執行的操作,可以使用 -n
或 --dry-run
選項,該選項會打印出同步結果,但實際上並不做真正的同步操作,一般會增加一個 -v
選項來查看輸出結果,例如:
rsync -anv dir1/ dir2
同步遠程文件
rsync 同步遠程文件語法和 scp 命令相似,只要你擁有遠程 SSH 訪問權限,同時遠程和本地都安裝了 rsync 命令。
推送文件至遠程
rsync -a dir1 [email protected]_host:destination_directory
拉拽文件至本地
rsync -a [email protected]_host:~/path/to/dir1 local_destination_path
無論是推送還是拉拽,第一個參數總是源文件,第二參數才是目標文件。
常用選項
如果你要同步一些未壓縮的文件,你可以使用 -z
選項來壓縮文件並傳輸以減少網絡傳輸量。
rsync -az src dest
另外一個非常有用的選項是 -P
,該選項結合了 --progress
和 --partial
兩個選項的功能,--progress
表示顯示同步進度條,--partial
表示斷點續傳。
rsync -azP src dest
要兩個目錄絕對同步,那就必須在目標目錄中刪除源目錄中已刪除的文件。在默認情況下,rsync 不從目標目錄中刪除任何東西,但我們可以使用 --delete
選項來修改這種默認行為:
rsync -a --delete src dest
如果你想要排除某些文件進行同步,你可以使用 --exclude=pattern
選項,多個文件之間使用 ,
分隔:
rsync -a --exclude=pattern1,pattern2 src dest
使用不同的 SSH 端口:
rsync -azP -e "ssh -p 2422" src dest
附錄
- How To Use Rsync to Sync Local and Remote directories on a VPS
rsync - 遠程同步工具