我在 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/