Rsync
如何只同步新文件
我正在嘗試通過將新生成的文件添加到遠端伺服器來設置 rsync 以將我的主 Web 伺服器與遠端伺服器同步。
這是我使用的命令:
rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar
但似乎 Web 伺服器實際上傳輸了所有文件,儘管有“–update”標誌。我嘗試了不同的標誌組合(例如省略’-a’並使用’-uv’),但沒有任何幫助。如何修改 rsync 命令以僅發送新添加的文件?
來自
man rsync
:--ignore-existing skip updating files that exist on receiver
--update
做了一些稍微不同的事情,這可能就是您得到意外結果的原因(請參閱 參考資料man rsync
):這會強制 rsync 跳過目標上存在的任何文件,並且修改時間比源文件新。(如果現有目標文件的修改時間等於源文件的修改時間,則如果大小不同,它將被更新。)
就我而言,我遇到了類似的問題,傳輸了所有文件,而不僅僅是修改過的/新文件。我通過使用參數
-t
(而不是-a
)和-P
(相當於--partial --progress
)解決了這個問題:rsync -h -v -r -P -t源 目標
這只會傳輸新文件,以及已經存在但已修改的文件:
-a
做得太多,例如使用者和組 ID 同步,在我的情況下,這無法正常工作,因為我的源系統和目標系統上有不同的使用者和組。詳細參數:
-h
:人類可讀的數字-v
: 詳細-r
: 遞歸到目錄-P
:(--partial
保留部分傳輸的文件)+
--progress
(在傳輸過程中顯示進度)
-t
: 保留修改時間