2012-09-05 159 views
2

我有一個小的Java應用程序/服務,使用Java 7的新java.nio.file.WatchService觀察根文件夾及其子文件夾。當發生新事件(新文件,修改,刪除等等)時,我啓動rsync執行,將文件從服務器A複製到服務器B(反之亦然)。該命令使用--delete選項來確保從A中刪除的文件也從B中刪除。但是,要使用此功能,必須啓用-r(遞歸子目錄)。通常這不是什麼大問題,但根文件夾是5GB數據(19000個文件,1500個文件夾)。 Rsync擅長它,但仍需要幾分鐘才能運行。rsync遞歸限制深度

我遇到的問題是,如果兩個服務器上的文件大致在同一時間發生更改,則可能會由於同步B> A而在服務器A上創建的新文件被刪除,因爲--delete只能進行比較源到目的地並且看到目的地具有比源更多的文件。

由於我已經習慣用Java應用程序監視每個目錄,因此我不必在rsync中使用-r(遞歸)。我的第一個想法是限制rsync遞歸的深度,但我不認爲這是rsync的一個功能。我也考慮過使用--exclude,但我不確定這個模式可能是什麼樣子。 任何人有任何想法?

作爲參考,這裏是所生成的rsync命令的一個示例:

rsync -r --no-group --no-owner --no-perms --update --checksum --verbose --progress --stats --delete --ignore-errors "/media/server1files/" "/server2::server2"

回答

5

要使用-r適當的圖案時使用,即使排除子文件夾是--exclude "/**/*"