rsync同步檔案有三種模式:
1、把源站路徑下某個檔案,同步到目標路徑。例如rsync -aR /data/1/2/3/a.txt 1.1.1.1:/data/ ,目標機器將自動建立多層目錄存放a.txt。也可以換不同存放目錄,例如rsync -aR /data/1/2/3/a.txt 1.1.1.1:/backup/,得到/backup/data/1/2/3/a.txt。
2、把源站某個目錄,同步到目錄路徑。例如rsync -a /data/1/2/3 1.1.1.1:/data/other/ ,將把目錄3拷貝到目標機器的other目錄下,而3裡邊如果有子目錄,都會跟著一起過去。
3、把源站某個檔案同步到目標檔案。例如例如rsync -a /src/b.txt 1.1.1.1:/data/1/2/3/b.txt,這樣即使目錄不一樣,最後也只是b.txt傳遞過去,而不是把源站的目錄結構傳過去。
第一二種情況,根目錄一般都要先建好,不存在的情況還沒測試過。
第三種情況,目錄路徑很可能就不存在,而這裡就有坑點。rsync只支援建立一層目錄!!!也就是說,上述例子,只允許目錄3不存在,字首/data/1/2/必須先存在。
要解決上述問題,就要用點小技巧,例如:
1、用別的程式建立目錄
2、ssh過去先建立
3、奇技淫巧:rsync -a --rsync-path="mkdir -p /tmp/imaginary/ && rsync" /src/b.txt 1.1.1.1:/data/1/2/3/b.txt。我覺得這個方法類似sql注入的思路,rsync-path用於指定目標機器rsync服務在哪裡。