Si la copie est effectuée dans un terminal shell (c'est-à-dire bash), il cp
peut alors être explicitement demandé de copier le fichier vers lequel pointe un lien --dereference
, au lieu du lien lui-même. Le comportement par défaut de cp
est de copier des fichiers en suivant leurs liens, mais de nombreux navigateurs graphiques de fichiers semblent avoir un comportement par défaut en tentant de copier des liens et en conservant généralement la plupart des attributs.
man cp
-a, --archive
same as -dR --preserve=all
-d same as --no-dereference --preserve=links
-L, --dereference
always follow symbolic links in SOURCE
Exemple
touch SomeFile.txt
echo "some content" > someFile.txt
ln -s -T someFile.txt someLink
echo "Some content for the test file." > someLink
mkdir someDirectory
ln -s -T someDirectory someDirLink
Le fait qu'il someLink
s'agit d'un lien est indiqué par le l
drapeau à la première position de la sortie de la liste (et «d» désigne un répertoire).
ls -l
drwxrwxr-x. 2 user group 4096 Aug 17 17:17 someDirectory
lrwxrwxrwx. 1 user group 13 Aug 17 17:17 someDirLink -> someDirectory
-rw-rw-r--. 1 user group 32 Aug 17 17:01 someFile.txt
lrwxrwxrwx. 1 user group 12 Aug 17 17:12 someLink -> someFile.txt
Le fichier contient le contenu et le lien pointe vers le fichier, mais peut être utilisé de presque n'importe quelle manière. (Notez la taille du fichier de lien par rapport à la taille du fichier texte: 32 octets vs 12 octets.)
cat someFile.txt
Some content for the test file.
cat someLink
Some content for the test file.
Tout d'abord, copiez le lien dans un répertoire. Copiez ensuite le fichier dans le répertoire, via le lien. (Ce qui suit montre également que les liens de répertoire fonctionnent de manière similaire aux liens de fichiers.):
cp -a someLink someDirLink/newCopy
cp -L someLink someDirectory/newCopy.txt
ll -l someDirLink/
lrwxrwxrwx. 1 user group 12 Aug 17 17:12 newCopy -> someFile.txt
-rw-rw-r--. 1 user group 32 Aug 17 17:36 newCopy.txt
Mise en garde
Des liens peuvent être créés pour pointer vers un chemin complet ou un chemin relatif. Étant donné que cet exemple utilise une liaison basée sur le chemin relatif de la cible se trouvant dans le même répertoire que le lien en cours de création, le lien a été rompu lors de sa copie dans un nouveau répertoire.
cat someDirLink/newCopy
cat: someDirLink/newCopy: No such file or directory
cat someDirLink/newCopy.txt
Some content for the test file.