尽管我特意只传输了

尽管我特意只传输了

我在 Mac 终端上使用此命令仅同步远程主机上大小已发生变化的 Java 文件:

rsync -rP --size-only --include="/" --include=".java" --exclude="*" /src/dir1/ remote-host:/src/dir1/

但是,我的源文件夹中有几个.git/objects/??/目录,但其中没有 java 文件。

例如

ls .git/objects/e3 4704650cf08c9d36c8e6699cf08b6e672e532b    # file but not java

在远程主机上,它创建了完全相同.git/objects/e3但完全为空的文件夹。我该如何防止这种情况发生?

答案1

您的命令会从 开始向下追溯整个源树/src/dir1,在此过程中,会在目标上创建相应的目录。您可以使用--prune-empty-dirs( -m) 选项推迟目录创建,这意味着只会在目标上创建必要的目录。

删除--size-only了基于时间的比较检查的安全性。我强烈建议,除非您真的有令人信服的理由不使用基于时间的检查(例如,您的源或目标没有正确的时钟),否则您应该使用它。将--times-t)添加到您的命令并删除--size-only以进行此优化。

我还修复了include/exclude选项,以便它们复制所有*.java文件。

rsync -rtmP --include="***/" --include="*.java" --exclude="*" /src/dir1/ remote-host:/src/dir1/

相关内容