来自man cp
,删节:
-a
:存档模式。与选项相同-RpP
。保留文件的结构和属性,但不保留目录结构。-R
:如果source_file
指定一个目录,cp
则复制该目录和该点连接的整个子树。如果source_file
以 a 结尾/
,则复制目录的内容而不是目录本身。-p
:导致cp
在副本中保留每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、用户 ID 和组 ID(如权限所允许)。-P
:不遵循任何符号链接。-R
如果指定了该选项,则这是默认值。
-P
被描述为包含在-R
,但是为什么-a
被描述为-RpP
而不是仅仅-Rp
?已在 Ask Different 上回答,https://apple.stackexchange.com/q/267220-a
不保留目录结构是什么意思?-R
复制文件时,和标志是否-P
有意义,而不是文件夹,例如,在执行 时cp *.(txt|md) docs/
?
zsh 5.9(x86_64-apple-darwin23.0),macOS 14.4.1
-P
、-H
和标准选项-L
是互斥的。设置其中一项会取消设置另外两项。最后一名(从左到右)获胜。-LHP
与 相同-P
,-HPL
与 相同-L
。现在,当文档说该-P
行为是默认行为时,-R
并不意味着-P
在您使用 时也应用该行为-R
。与/cp -LR
相同cp -RL
或不同。cp -R
cp -RP
另一方面, (不是标准选项)与、is和cancels
-a
相同。如果你想申请的话就需要。-RpP
cp -L -a
cp -L -RpP
-P
-L
cp -a -L
-L
您可以在FreeBSD 的源代码
cp
(macos 的基础)中遵循它:[...]
-a
不保留目录结构是什么意思?我不清楚。该措辞没有出现在FreeBSD 的cp
手册页中,因此它一定是由 Apple 添加的。这意味着在复制到现有目录时不会删除现有文件和子目录的建议对我来说并不令人信服。您可能必须询问Apple(因为据我所知,他们的源代码和修订控制历史记录不公开)才能确定。请注意,这不是Unix 上的文件与目录。目录只是多种文件类型中的一种。其他类型包括fifos、sockets、块设备、符号链接、常规文件...
-R
仅用于R
目录的递归复制,对于其他类型的文件,除了一个主要是副作用的例外之外没有任何效果-R
:导致物理遍历就像-P
给定一样,这意味着对于符号链接类型的文件,无论是指向目录还是任何其他类型文件的符号链接,都只是复制符号链接,而不是其目标。如果您确实想要这种效果,您宁愿使用-P
专用于该效果的选项。