cp vs cp -r en enlaces simbólicos

cp vs cp -r en enlaces simbólicos

Recientemente experimenté con el comando cp y noté lo siguiente:
Supongamos que tenemos una carpeta fooque contiene el archivo bary el enlace simbólico l-bar:

foo
|-- bar
|-- lbar -> bar

Al copiar lbarcon el valor predeterminado cp lbar copy-lbar, obtenemos

foo
|-- bar
|-- copy-lbar
|-- lbar -> bar

¿Dónde copy-lbarhay un archivo normal que contiene el contenido original de bar. copy-lbarno está vinculado de ninguna manera a baro lbar. Cuando usamos cp -r lbar copy-lbar-recursiveen su lugar, obtenemos lo siguiente:

foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar

Ahora, al igual que lbar, copy-lbar-recursiverepresenta un enlace al bararchivo original.

Pero ¿por qué aparece la -r, --recursiveopción de cpcambiar la forma en que se copian los enlaces?
El helpy manualde cpambos simplemente lo marcan como"copiar directorios recursivamente".
¿Qué sucede internamente que -rtiene 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( ). -lEste 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.

información relacionada