250 votes

Créer un lien symbolique de répertoire dans Ubuntu

Voici mon code pour créer un lien symbolique d'un répertoire :

sudo ln -s /usr/local/nginx/conf/ /etc/nginx

J'ai déjà créé le répertoire /etc/nginx . Je veux juste le contenu du répertoire source ( /usr/local/nginx/conf/ ) pour être dans le contenu du répertoire cible ( /etc/nginx ). Mais quand j'exécute le code, /etc/nginx contient un répertoire appelé conf au lieu du contenu de conf . Ce répertoire contient le contenu que je veux, mais au mauvais endroit.

Pourquoi a-t-il placé un répertoire dans le dossier cible, au lieu de placer simplement le contenu du répertoire dans le dossier cible ?

261voto

FatalError Points 19772

C'est le comportement de ln si la seconde arg est un répertoire. Il place un lien vers le premier argument à l'intérieur . Si vous voulez /etc/nginx pour être le lien symbolique, vous devez d'abord supprimer ce répertoire et exécuter la même commande.

30voto

Celada Points 12082

C'est ce que ln est documenté pour faire quand la cible existe déjà et est un répertoire. Si vous voulez /etc/nginx à être un lien symbolique plutôt que contiennent un lien symbolique, il vaut mieux ne pas le créer d'abord comme un répertoire !

11voto

kayn Points 60

Dans script est utile quelque chose comme ceci :

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

il empêche avant de recréer un "mauvais" lien symbolique en boucle après avoir réexécuté script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X