rsync 抱怨符号链接

rsync 抱怨符号链接

我使用dry-run(-n) 选项来rsync比较两个不同系统上的目录。标准文件和目录一切正常。但是,当我使用包含符号链接的目录时,我收到错误:

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

我很高兴它无法删除该目录,因为我实际上并没有尝试更改任何内容,但为什么它还要尝试这样做呢?顺便说一句,我尝试添加-l(链接)和-K(复制链接)选项,但没有效果。

即使目录结构中存在符号链接,如何才能进行此比较?

答案1

正如您所示,system/nrcalc是本地系统上的符号链接,但它是远程服务器上的目录。如果远程系统上的目录不为空,rsync 将拒绝删除它(为符号链接让路),除非您指定--force或选项之一--delete。如果您不想替换远端的目录,但仍需要使用本地符号链接指向的内容来更新它,则可以使用--copy-dirlinks.

即使指定了 Rsync 也会抱怨这一点,--dry-run以提醒您它需要删除远端的目录才能执行您要求它执行的操作。结合使用我提到的任何选项-n都可以让您进行干净的试运行,而无需实际删除任何内容。

至于您尝试过的其他选项:

  • 选项-K( --keep-dirlinks) 等同于--copy-dirlinks,但在目标端除外。您的符号链接位于源端,这就是为什么此选项对您没有影响。

  • 选项-l( --links) 确保将符号链接复制为符号链接,但同样,如果没有--force--delete,rsync 将拒绝用符号链接替换非空目录。另外,-a暗示-l,所以无论如何你一直在使用它。

相关内容