为什么 "dir/" 和 "dir" 与 rsync 之间存在这种差异

Why this difference between "dir/" and "dir" with rsync

我一直在纠结一些我不理解的事情,我认为这是一个简单的 rsync 命令行。

 rsync -u -v -r -n  "~/usb/.notes/_tech"  "~/.notes/_tech"

其中:usb 节点是 (known) usb 的挂载点。问题是以下两种变体给出了截然不同的结果。

示例 1.

  $ rsync -u -v -r -n  "~/usb/.notes/_tech"  "~/.notes/_tech" | tee | wc -l
      :

  sent 94,378 bytes  received 6,340 bytes  201,436.00 bytes/sec
  total size is 13,222,770,177  speedup is 131,285.07 (DRY RUN)

示例 2.

  $ rsync -u -v -r -n  "~/usb/.notes/_tech/"  "~/.notes/_tech/" | tee | wc -l
      :

  sent 88,352 bytes  received 334 bytes  177,372.00 bytes/sec
  total size is 13,222,770,177  speedup is 149,096.48 (DRY RUN)

T因此 ...我认为示例 #1 正在给我那棵树上的 All 文件。虽然,示例 #2 更符合我的预期(但这并不意味着它是“正确”)。

问题:

  1. 为什么完全不同?!
  2. 哪种语法选择提供了文件夹子树的这种简单、递归更新?
  3. 如此巨大差异背后的根本原因是什么?
    • 例如;周末,我发现在考虑 rsync 命令时我需要使用 ls -lt**c** 。 (一旦你意识到这一点就很明显了)。
    • 此外,在谈论 rsync 时,“大小确实很重要 ”。
    • 我可以接受“dir/”与“dir”(无斜线)在语义上的差异。我看不出使用递归开关 (-r) 有什么不同/如果有的话。

我在示例中没有看到结构问题;所以我正在从 Whosebug 中寻求智慧?!!见解?

寻求智慧。

您所有问题的答案都在手册页中:

A trailing slash on the source changes this behavior to avoid
creating an additional  directory level at the destination.
You can think of a trailing / on a source as meaning "copy the
contents of this directory" as  opposed to  "copy the directory
by name", but in both cases the attributes of the containing
directory are transferred to the containing directory on the
destination.

所以 rsync -r /foo/ /tmp 会将 /foo 中的所有内容放入 /tmprsync -r /foo /tmp 会将 /foo 中的所有内容放入 /tmp/foo.