首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >符号链接上的cp与cp -r

符号链接上的cp与cp -r
EN

Unix & Linux用户
提问于 2021-06-02 17:06:28
回答 1查看 999关注 0票数 1

我最近实验了cp命令,并注意到以下内容:

让我们假设我们有一个文件夹foo,其中包含文件bar和符号链接l-bar

代码语言:javascript
代码运行次数:0
运行
复制
foo
|-- bar
|-- lbar -> bar

当使用默认的lbar复制cp lbar copy-lbar时,我们将

代码语言:javascript
代码运行次数:0
运行
复制
foo
|-- bar
|-- copy-lbar
|-- lbar -> bar

其中copy-lbar是一个常规文件,包含bar的原始内容。copy-lbar没有以任何方式链接到barlbar。当使用cp -r lbar copy-lbar-recursive时,我们得到以下信息:

代码语言:javascript
代码运行次数:0
运行
复制
foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar

现在,就像lbar一样,copy-lbar-recursive代表到原始bar文件的链接。

但是为什么-r, --recursive选项cp会改变链接的复制方式呢?

helpmanual of cp都只是将其标记为“递归复制目录”。

-r对符号链接有不同的影响,在内部会发生什么呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/652495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档