rsync同步文件有三種模式:
一、把源站路徑下某個文件,同步到目標路徑。例如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。
二、把源站某個目錄,同步到目錄路徑。例如rsync -a /data/1/2/3 1.1.1.1:/data/other/ ,將把目錄3拷貝到目標機器的other目錄下,而3裏邊若是有子目錄,都會跟着一塊兒過去。
三、把源站某個文件同步到目標文件。例如例如rsync -a /src/b.txt 1.1.1.1:/data/1/2/3/b.txt,這樣即便目錄不同,最後也只是b.txt傳遞過去,而不是把源站的目錄結構傳過去。sql
第一二種狀況,根目錄通常都要先建好,不存在的狀況還沒測試過。
第三種狀況,目錄路徑極可能就不存在,而這裏就有坑點。rsync只支持建立一層目錄!!!也就是說,上述例子,只容許目錄3不存在,前綴/data/1/2/必須先存在。ssh
要解決上述問題,就要用點小技巧,例如:
一、用別的程序建立目錄
二、ssh過去先建立
三、奇技淫巧: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服務在哪裏。測試