cp -L vs. cp -H


46

Problema

Quando copio i file con cp -Ho cp -L, ottengo gli stessi risultati:

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

Questa risposta qui descrive entrambe le opzioni come SENZA MENO utilizzate in combinazione con -R. Non per me. I file con collegamento fisso diventano copie rinominate dei file a cui puntano alla fonte.
 

Domanda :

Qual è l'uso corretto di cp -He cp -L? È questo il comportamento previsto?


  Il mio tentativo di risolvere : man cpmi dice lo stesso per entrambe le opzioni, ma info cpla formulazione rende ancora più confuso per me. Forse uno può aiutarmi a scomporre un po 'questo:

-H Se un argomento della riga di comando specifica un collegamento simbolico, copia il file a cui punta anziché il collegamento simbolico stesso. Tuttavia, copia (preservandone la natura) ogni collegamento simbolico che si incontra attraverso l'attraversamento ricorsivo.

Mi sembra una contraddizione: immagino che " la natura di un collegamento simbolico " sia che indica da qualche parte ...

-L, --dereference Segui i collegamenti simbolici quando copi da loro. Con questa opzione, cpnon è possibile creare un collegamento simbolico. Ad esempio, un collegamento simbolico (in un file normale) nella struttura di origine verrà copiato in un file normale nella struttura di destinazione.

So che un link simbolico non è un file normale, ma ... ammetto di aver superato questa spiegazione qui.


Corri info cp, cerca -R. Dice Copy directories recursively. Ma stai testando con non directory. La differenza sta nel contenuto delle directory che si stanno copiando, non negli argomenti della riga di comando.
Mikel,

@Mikel Ho provato a copiare il contenuto delle directory e a copiare le directory con il contenuto stesso e ho ottenuto gli stessi risultati. Inoltre: mi sono seduto abbastanza a lungo di fronte info cpe ho cercato di capire cosa significhi effettivamente la scelta delle parole su questa opzione & ndash; e di cui parla questo post. Il post contiene anche la dicitura effettiva di info cp- quindi devo averlo almeno aperto ...;)
erch

Risposte:


56

Con i collegamenti simbolici, gli strumenti hanno due cose che possono fare:

  1. Trattare il collegamento simbolico come un collegamento simbolico ("preservandone la natura"), oppure
  2. Considera il collegamento simbolico come il tipo di file a cui punta.

Dire che -H"preserva la sua natura" non è una contraddizione. Considera l'alternativa. Se si utilizza -L, tutti i collegamenti simbolici cpverranno aperti e il loro contenuto verrà copiato nel nome del file di destinazione. Quindi la fonte era un collegamento simbolico, ma la sua copia non è un collegamento simbolico. Quindi "perse la sua natura di collegamento simbolico".

Tener conto di

$ 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  

Ottima risposta: adoro il modo in cui illustrate cosa fanno le opzioni. Non risponde esattamente alla mia domanda, che riguarda la copia dei collegamenti simbolici nelle directory dei fratelli, ma hai reso ovvio come posso fare un rapido esperimento per scoprirlo. 😉
Michael Scheper,

1
Ah, ho scoperto che quello che volevo davvero sapere era questo: superuser.com/a/138594/219388
Michael Scheper,

19

La differenza di comportamento tra -Le -Harriva anche quando -rviene specificato. cpnon creerà collegamenti simbolici nelle sottodirectory -L -rma lo farà se lo usi -H -r.


cp: le opzioni -H, -L e -P non possono essere specificate con l'opzione -r.
3z33etm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.