Créer un lien symbolique de répertoire dans Ubuntu [fermé]

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 avait-il mis un répertoire dans le dossier cible, au lieu de simplement mettre l' contenu du répertoire dans le dossier cible?

228
demandé sur nbro 2012-02-02 02:28:31

3 réponses

C'est le comportement de ln si le second argument est un répertoire. Il met un lien vers le premier arg à 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.

233
répondu FatalError 2013-12-19 08:23:08

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

28
répondu Celada 2012-02-01 22:32:44

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 le lien symbolique en boucle "mauvais" après le script de réexécution

8
répondu kayn 2013-09-16 16:18:42