cp -L frente a cp -H

cp -L frente a cp -H

Problema

Al copiar archivos con cp -Ho cp -L, obtengo los mismos resultados:

$ ls -l fileA
  fileA -> fileB
$ cp fileA somewhere/ -H
$ ls -l somewhere/
  fileA     # fileA is a copy of fileB, only renamed, with same properties!

Esta respuesta aquídescribe ambas opciones como similares A MENOS que se utilicen en combinación con -R. No para mí. Los archivos con vínculos físicos o físicos se convierten en copias renombradas de los archivos a los que apuntan en el origen.
 

Pregunta:

¿Cuál es el uso adecuado de cp -Hy cp -L? ¿Es este el comportamiento esperado?


  Mi intento de resolver: man cpme dice exactamente lo mismo para ambas opciones, pero info cp'sfraseologíalo hace aún más confuso para mí. Quizás alguien pueda ayudarme a desglosar esto un poco:

-H Si un argumento de línea de comando especifica un enlace simbólico, entoncescopie el archivo al que apunta en lugar del enlace simbólicosí mismo. Sin embargo,copiar (preservando su naturaleza) cualquier enlace simbólicoque se encuentra mediante un recorrido recursivo.

Esto me suena a contradicción: supongo que»la naturaleza de un vínculo simbólico« es que apunta a alguna parte…

-L, --dereference Siga los enlaces simbólicos al copiarlos. Con esta opción cpno se puede crear un enlace simbólico. Por ejemplo, un enlace simbólico (a un archivo normal) en el árbol de origen se copiará a un archivo normal en el árbol de destino.

Sé que un enlace simbólico no es un archivo normal, pero... admito que esta explicación me desafía demasiado.

Respuesta1

Con enlaces simbólicos, las herramientas pueden hacer dos cosas:

  1. Trate el enlace simbólico como un enlace simbólico ("preservando su naturaleza"), o
  2. Trate el enlace simbólico como el tipo de archivo al que apunta.

Decir que -H"conserva su naturaleza" no es una contradicción. Considere la alternativa. Si usa -L, cpse abrirán todos los enlaces simbólicos encontrados y su contenido se copiará al nombre del archivo de destino. Entonces la fuente era un enlace simbólico, pero su copia no es un enlace simbólico. Entonces "perdió su naturaleza como enlace simbólico".

Considerar

$ mkdir subdir
$ echo "some contents" > subdir/file
$ ln -s file subdir/link

# definition of "list", the abbreviated ls -l output used below
$ list() { ls -l "$@" | \
    awk '$0 !~ /^total/ { printf "%s %s\t%s %s %s\n", $1, $5, $9, $10, $11 }' ; }

$ list subdir
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rH subdir subdir-with-H
$ list subdir-with-H
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rL subdir subdir-with-L
$ list subdir-with-L
-rw-rw-r-- 14   file  
-rw-rw-r-- 14   link  

Respuesta2

También se especifica la diferencia de comportamiento entre -Ly -Hcuando . No creará enlaces simbólicos en subdirectorios con, pero lo hará si usa .-rcp-L -r-H -r

información relacionada