web-dev-qa-db-fra.com

Comment créer un lien symbolique de dossier avec un nom différent?

Je veux créer un lien symbolique

~/.pm2/logs -> /opt/myapp/log

Quand je cours

ln -sFf /opt/myapp/log ~/.pm2/logs

Je reçois un lien symbolique

~/.pm2/logs/log -> /opt/myapp/log

ce n'est pas ce que je veux.

Je préférerais une solution compatible POSIX si possible.

5
ptkvsk

Vous avez déjà un répertoire à ~/.pm2/logs. Puisque ce répertoire existe, le lien symbolique y est placé.

Voudriez-vous que ~/.pm2/logs est un lien symbolique plutôt qu'un répertoire, vous devrez d'abord supprimer ou renommer ce répertoire existant.

9
Kusalananda

Comme d'autres réponses le disent, il existe déjà un répertoire.

Pour éviter cela et obtenir un message d'erreur à la place, utilisez le -T option, malheureusement je ne pense pas que ce soit Posix (c'est GNU).

Depuis le manuel Gnu ln (idem pour cp et mv).

   ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
   ln [OPTION]... TARGET                  (2nd form)
   ln [OPTION]... TARGET... DIRECTORY     (3rd form)
   ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

Notez le formulaire 1 sans le -T est ambigu avec la forme 3 (les deux ont deux arguments).

Dans Posix, vous pouvez forcer cette non-ambiguïté en mettant un / à la fin d'un nom de répertoire, dans le formulaire 3, mais je ne pense pas que vous puissiez faire l'inverse. C'est pourquoi Gnu a ajouté le -T option.

3
ctrl-alt-delor

Supprimez d'abord le répertoire ~/.pm2/logs, car votre cible est un répertoire existant, le lien est créé à l'intérieur.

2
XrXca