cp -L vs. cp -H

46

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 MENOS similares, utilizadas en combinación con -R. No para mí. Los archivos soft-hardlinked se convierten en copias renombradas de los archivos a los que apuntan en la fuente.
 

Pregunta :

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


  Mi intento de resolver : man cpme dice lo mismo para ambas opciones, pero info cpla redacción lo hace aún más confuso para mí. Tal vez uno pueda ayudarme a analizar esto un poco:

-H Si un argumento de línea de comando especifica un enlace simbólico, copie el archivo al que apunta en lugar del enlace simbólico en sí. Sin embargo, copie (preservando su naturaleza) cualquier enlace simbólico que se encuentre a través del recorrido recursivo.

Esto me parece una contradicción: supongo que » la naturaleza de un enlace simbólico « es que apunta a alguna parte ...

-L, --dereference Siga los enlaces simbólicos cuando copie de ellos. 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í sé que un enlace simbólico no es un archivo normal, pero ... admito que estoy muy cuestionado con esta explicación aquí.

erch
fuente
Corre info cp, busca -R. Dice Copy directories recursively. Pero estás probando con no directorios. La diferencia está en lo que hay dentro de los directorios que está copiando, no en los argumentos de la línea de comandos.
Mikel
@Mikel He intentado copiar el contenido de los directorios y copiar los directorios con contenido y obtuve los mismos resultados. Además: me senté bastante tiempo delante info cpy traté de averiguar qué significa realmente la elección de palabras en esta opción & ndash; y de qué trata esta publicación. La publicación también contiene la redacción real de info cp- por lo tanto, al menos debo haberla abierto ...;)
erch

Respuestas:

56

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

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

Decir que -H"preserva su naturaleza" no es una contradicción. Considera la alternativa. Si lo usa -L, cpse abrirán los hallazgos de enlaces simbólicos 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 un 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  
Mikel
fuente
Gran respuesta: me encanta la forma en que ilustras lo que hacen las opciones. No responde a mi pregunta, que se trata de copiar enlaces simbólicos a directorios hermanos, pero has dejado en claro cómo puedo hacer un experimento rápido para averiguarlo. 😉
Michael Scheper
1
Ah, resulta que lo que realmente quería saber era esto: superuser.com/a/138594/219388
Michael Scheper el
19

La diferencia en el comportamiento entre -Ly -Hviene cuando -rse especifica también. cpno creará enlaces simbólicos en subdirectorios, -L -rpero lo hará si lo usa -H -r.

Kyle Jones
fuente
cp: las opciones -H, -L y -P pueden no especificarse con la opción -r.
3z33etm