Con i collegamenti simbolici, gli strumenti possono fare due cose:
- Tratta il collegamento simbolico come un collegamento simbolico ("preservando la sua natura"), o
- Tratta il collegamento simbolico come il tipo di file a cui punta.
Dicendo che -H
"preserva la sua natura" non è una contraddizione. Considera l'alternativa. Se usi -L
, qualsiasi collegamento simbolico cp
find verranno aperti e il loro contenuto copiato nel nome del file di destinazione. Quindi la fonte era un collegamento simbolico, ma la sua copia non è un collegamento simbolico. Quindi "ha perso la sua natura di collegamento simbolico".
Considera
$ 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 "[email protected]" | \
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
La differenza di comportamento tra -L
e -H
arriva quando -r
è specificato pure. cp
non creerà collegamenti simbolici nelle sottodirectory con -L -r
ma lo farà se usi -H -r
.