web-dev-qa-db-fra.com

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 que le contenu du répertoire source (/usr/local/nginx/conf/) soit dans le contenu du répertoire cible (/etc/nginx). Mais lorsque j'exécute le code, /etc/nginx contient un répertoire nommé 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 simplement placer son contenu dans le dossier cible?

241
user959129

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

249
FatalError

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

30
Celada

Dans le 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 une nouvelle exécution du script

9
kayn