Avec les liens symboliques, les outils peuvent faire deux choses :
- Traiter le lien symbolique comme un lien symbolique ("en préservant sa nature"), ou
- Traitez le lien symbolique comme le type de fichier vers lequel il pointe.
Dire que -H
"préserve sa nature" n'est pas une contradiction. Considérez l'alternative. Si vous utilisez -L
, tous les liens symboliques cp
finds seront ouverts et leur contenu copié dans le nom du fichier cible. Ainsi, la source était un lien symbolique, mais sa copie n'est pas un lien symbolique. Il "a donc perdu sa nature de lien symbolique".
Considérez
$ 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 différence de comportement entre -L
et -H
vient quand -r
est également spécifié. cp
ne créera pas de liens symboliques dans les sous-répertoires avec -L -r
mais ce sera le cas si vous utilisez -H -r
.