cp -L vs. cp -H

46

Problema

Ao copiar arquivos com cp -Hou cp -L, obtenho os mesmos 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 resposta aqui descreve as duas opções como MENOS semelhantes, a menos que usadas em combinação com -R. Não para mim. Os arquivos vinculados por software tornam-se cópias renomeadas dos arquivos para os quais apontam na origem.
 

Pergunta :

Qual é o uso adequado de cp -He cp -L? Este é o comportamento esperado?


  Minha tentativa de resolver : man cpdiz-me o mesmo para as duas opções, mas info cpas palavras o tornam ainda mais confuso. Talvez alguém possa me ajudar a detalhar um pouco:

-H Se um argumento da linha de comandos especificar um link simbólico, copie o arquivo para o qual aponta, em vez do próprio link simbólico . No entanto, copie (preservando sua natureza) qualquer link simbólico encontrado por meio de passagem recursiva.

Isso parece uma contradição para mim: acho que » a natureza de um elo simbólico « é que aponta para algum lugar ...

-L, --dereference Siga os links simbólicos ao copiar deles. Com esta opção, cpnão é possível criar um link simbólico. Por exemplo, um link simbólico (para arquivo normal) na árvore de origem será copiado para um arquivo regular na árvore de destino.

Eu sei que um link simbólico não é um arquivo comum, mas… eu admito que estou muito desafiado com esta explicação aqui.

erch
fonte
Corra info cp, procure -R. Diz Copy directories recursively. Mas você está testando com não diretórios. A diferença está no conteúdo dos diretórios que você está copiando, não nos argumentos da linha de comando.
Mikel
@ Mikel Eu tentei copiar o conteúdo dos diretórios e copiar os diretórios com o próprio conteúdo e obtive os mesmos resultados. Também: Fiquei muito tempo na frente info cpe tentei descobrir o que a escolha das palavras nessa opção realmente significa & ndash; e sobre o qual esta postagem é sobre. A publicação também contém a própria redacção de info cp- assim I deve ter, pelo menos abriu ...;)
erch

Respostas:

56

Com links simbólicos, as ferramentas têm duas coisas que podem ser feitas:

  1. Trate o link simbólico como um link simbólico ("preservando sua natureza") ou
  2. Trate o link simbólico como o tipo de arquivo para o qual ele aponta.

Dizer que -H"preserva sua natureza" não é uma contradição. Considere a alternativa. Se você usar -L, qualquer cpdescoberta de links simbólicos será aberta e seu conteúdo copiado para o nome do arquivo de destino. Portanto, a fonte era um link simbólico, mas sua cópia não é um link simbólico. Então, "perdeu sua natureza como um link 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
fonte
Ótima resposta - adoro o modo como você ilustra o que as opções fazem. Isso não responde muito bem à minha pergunta, que consiste em copiar links simbólicos para diretórios de irmãos, mas você tornou óbvio como eu posso fazer um experimento rápido para descobrir. Sche
Michael Scheper
1
Ah, gira para fora o que eu realmente queria saber era isto: superuser.com/a/138594/219388
Michael Scheper
19

A diferença de comportamento entre -Le -Hvem quando também -ré especificada. cpnão criará links simbólicos em subdiretórios, -L -rmas criará se você usar -H -r.

Kyle Jones
fonte
cp: as opções -H, -L e -P podem não ser especificadas com a opção -r.
3z33etm 8/02