Rsync

如何只同步新文件

  • October 24, 2021

我正在嘗試通過將新生成的文件添加到遠端伺服器來設置 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: 保留修改時間

引用自:https://unix.stackexchange.com/questions/67539