Recientemente experimenté con el comando cp y noté lo siguiente:
Supongamos que tenemos una carpeta foo
que contiene el archivo bar
y el enlace simbólico l-bar
:
foo
|-- bar
|-- lbar -> bar
Al copiar lbar
con el valor predeterminado cp lbar copy-lbar
, obtenemos
foo
|-- bar
|-- copy-lbar
|-- lbar -> bar
¿Dónde copy-lbar
hay un archivo normal que contiene el contenido original de bar
. copy-lbar
no está vinculado de ninguna manera a bar
o lbar
. Cuando usamos cp -r lbar copy-lbar-recursive
en su lugar, obtenemos lo siguiente:
foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar
Ahora, al igual que lbar
, copy-lbar-recursive
representa un enlace al bar
archivo original.
Pero ¿por qué aparece la -r, --recursive
opción de cp
cambiar la forma en que se copian los enlaces?
El help
y manual
de cp
ambos simplemente lo marcan como"copiar directorios recursivamente".
¿Qué sucede internamente que -r
tiene un efecto diferente en un vínculo simbólico?
Respuesta1
El llenodocumentación GNU(pero no la página de manual de Debian, por ejemplo), describe el comportamiento de la siguiente manera
Al copiar desde un enlace simbólico, cp normalmente sigue el enlace sólo cuando no se copia de forma recursiva o cuando se utiliza
--link
( ).-l
Este valor predeterminado se puede anular con las opciones--archive
(-a
),-d
,--dereference
(-L
),--no-dereference
(-P
) y-H
.
También escribe,
'
--recursive
' Copiar directorios de forma recursiva. De forma predeterminada, no siga enlaces simbólicos en la fuente a menos que se usen junto con la opción--link
(-l
) [...]
No es portátil utilizar -r para copiar enlaces simbólicos o archivos especiales. [...]
Además, no es portátil usar -R para copiar enlaces simbólicos a menos que también especifique -P, ya que POSIX permite implementaciones que eliminan la referencia a enlaces simbólicos de forma predeterminada.
Entonces, para responder directamente a su pregunta, el comportamiento es el descrito para mantener un elemento de compatibilidad de comportamiento predeterminado con POSIX.