为什么 "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,024 行(约 ~ 2,020 x 文件)
示例 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)
- 23 行(大约 19 个文件)
T因此 ...我认为示例 #1 正在给我那棵树上的 All 文件。虽然,示例 #2 更符合我的预期(但这并不意味着它是“正确”)。
问题:
- 为什么完全不同?!
- 哪种语法选择提供了文件夹子树的这种简单、递归更新?
- 如此巨大差异背后的根本原因是什么?
- 例如;周末,我发现在考虑
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
中的所有内容放入 /tmp
而 rsync -r /foo /tmp
会将 /foo
中的所有内容放入 /tmp/foo
.
我一直在纠结一些我不理解的事情,我认为这是一个简单的 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,024 行(约 ~ 2,020 x 文件)
示例 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)
- 23 行(大约 19 个文件)
T因此 ...我认为示例 #1 正在给我那棵树上的 All 文件。虽然,示例 #2 更符合我的预期(但这并不意味着它是“正确”)。
问题:
- 为什么完全不同?!
- 哪种语法选择提供了文件夹子树的这种简单、递归更新?
- 如此巨大差异背后的根本原因是什么?
- 例如;周末,我发现在考虑
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
中的所有内容放入 /tmp
而 rsync -r /foo /tmp
会将 /foo
中的所有内容放入 /tmp/foo
.