我最近实验了cp命令,并注意到以下内容:
让我们假设我们有一个文件夹foo
,其中包含文件bar
和符号链接l-bar
:
foo
|-- bar
|-- lbar -> bar
当使用默认的lbar
复制cp lbar copy-lbar
时,我们将
foo
|-- bar
|-- copy-lbar
|-- lbar -> bar
其中copy-lbar
是一个常规文件,包含bar
的原始内容。copy-lbar
没有以任何方式链接到bar
或lbar
。当使用cp -r lbar copy-lbar-recursive
时,我们得到以下信息:
foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar
现在,就像lbar
一样,copy-lbar-recursive
代表到原始bar
文件的链接。
但是为什么-r, --recursive
选项cp
会改变链接的复制方式呢?
help
和manual
of cp
都只是将其标记为“递归复制目录”。
-r
对符号链接有不同的影响,在内部会发生什么呢?
发布于 2021-06-02 17:23:11
完整的GNU文件 (但不是Debian手册)描述了这种行为
从符号链接复制时,cp通常只在不递归复制或使用
--link
(-l
)时才遵循该链接。可以使用--archive
(-a
)、-d
、--dereference
(-L
)、--no-dereference
(-P
)和-H
选项重写此默认值。
它还写道,
“
--recursive
”递归复制目录。默认情况下,除非与--link
(-l
)选项...一起使用,否则不要遵循源中的符号链接--使用-r复制符号链接或特殊文件是不可移植的。此外,除非您还指定了...,否则使用-R复制符号链接是不可移植的,因为POSIX允许默认情况下取消引用符号链接的实现。
因此,要直接回答您的问题,行为的描述是为了保持一个默认的行为兼容因素POSIX。
https://unix.stackexchange.com/questions/652495
复制相似问题