刚才查了一下标准,之前写的要改了,但在最后保留之前写的,以作对比,可以看出关键态度的转变过程。
大家知道 macOS 的基于 UNIX 核心的,具体说的 BSD,而且从2007 年以来它是被认证为符合 UNIX 03 的操作系统的。而 cp 命令是 UNIX 系统核心命令之一,那么要看 cp 命令是否应该支持 -r 选项,那么就要看规范是如何规定的了。
目前来说,UNIX 规范是由 open group 管理的,规范可以从它的官网的图书库下载,网址https://publications.opengroup.org/,只不过需要注册一下。我下载和参考的是“The Single UNIX® Specification: The Authorized Guide to Version 4”。没有旧版本相互对照,实在也是没有时间和精力,谁要是有的话,可以从不同版本中找到 cp 命令的规范的异同,能更全面的看出各个版本岁时间的变化。
就我下载的版本来说,它明确说作废了的 -r 被移除了。也就是说 cp 命令可以不支持 -r 选项了。参见下面的截图:

所以,我的建议是,应该改用 -R,最好是使用 -a。
从这里我也是学到了不少的东西,也是多谢 willWang 的执著追求。
-----------------------------------下面是之前写的-------------------------------------------------
如果需要 macOS 应该把 -r 实现为 与 -R 一样的,一方面可以填写 feedback;另一方面如果有开发者账号,在该账号中提交系统改进会更有效。
在 Linux man cp 中 -r 与 -R 是相同的, 在 Mac 上的实现 -R 是没问题的的。Mac 上 man cp 中说的 -r 是“ Historic versions of the cp utility had a -r option. ..... its use is strongly discouraged”,也就是 -r 这个选项强烈不建议使用。说明中有了说明和注释,说明它开发者是有意为之而不是忽视。对于一个公认特殊作用的功能,它的实现有瑕疵,那肯定是个 bug。但是像这种的就不好说是不是 bug 了,那么,提出改进意见是否被采纳,就看开发者了。从另外一个角度考虑,如果以后都使用 -R 参数,自己的脚本其实更通用不是。在我个人来说,一般都是遇到问题,看看说明,然后遵循本系统的规范,当然这样的负面问题是很难发现 bug。
另外,就如同 Linux 中 -d 其实就是 -pP,在 Mac 中就没有 -d,有 -p 和 -P。Linux 中在 -a 的说明中,使用的是"same as -dR --preserve=all" ,其中不是 -r 而是 -R,可能这个也会说明一点点问题,当然并不是什么太大的论点支撑,只是说细节。
macOS 系统的确有其自身的特点,毕竟它与任何 Linux 系统只能算是远房亲戚。还有好多命令方面与 Linux 相左。这种差异化在其实在 Linux 的不同发行版中也是存在的。比如 rpm 流派和 deb 流派的,而 Mac 上最流行的是 homebrew等。
最后,为了能够保证复制后的数据保持原样,个人实践最好是用 -a(也就是-pPR),而非单单的 -R。
[经过版主编辑]