3

我有一个小型 Java 应用程序/服务,它使用 Java 7 的新java.nio.file.WatchService. 当发生新事件(新文件、修改、删除等)时,我会启动 rsync 执行以将文件从服务器 A 复制到服务器 B(反之亦然)。该命令使用 --delete 选项来确保从 A 中删除的文件也从 B 中删除。但是,要使用此功能,您必须启用-r(递归子目录)。通常这没什么大不了的,但根文件夹是 5GB 的数据(19000 个文件,1500 个文件夹)。Rsync 非常擅长它的功能,但仍然需要几分钟才能运行。

我遇到的问题是,如果两台服务器上的文件几乎同时更改,则在服务器 A 上创建的新文件可能会被同步 B-> A 的进程删除,因为--delete仅将源与目标进行比较并看到目标文件比源文件多。

由于我已经在使用 Java 应用程序反复查看每个目录,因此我不必将-r(递归)与 rsync 一起使用。我的第一个想法是用 rsync 限制递归的深度,但我不认为这是 rsync 的一个特性。我也考虑过使用--exclude,但不确定该模式可能是什么样子。有人有想法么?

作为参考,这里是生成的 rsync 命令的示例:

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

4

1 回答 1

7

即使使用-r适当的模式来排除子文件夹,也要使用 is --exclude "/**/*"

于 2012-09-05T13:23:38.017 回答