web-dev-qa-db-fra.com

Comment forcer la création d'un lien symbolique?

J'ai un répertoire particulier plein d'autres annuaires organisés (nommés) par date. Pour la facilité de référence, j'ai un lien symbolique appelé current pointant sur le dernier.

Dans le script qui crée de nouveaux répertoires de date, je souhaite créer ou corriger le current symbolink à pointer vers le répertoire le plus récent une fois créé.

Je pensais que le commandement approprié serait juste, par exemple,

ln -fs 2017-03-01 current

Si le current Symlink n'existe pas encore, cela fonctionne.


Cependant, si le current symbolien a déjà été créé (et des points, disons-nous, au répertoire 2017-02-28), cela ne fonctionne pas:

Au lieu de retirer le symbole current et de créer un nouveau symbolique current qui pointe vers 2017-03-01, le résultat sera plutôt un symlink brisé appelé2017-03-01 pointant sur elle-même, Reposting Inside Le répertoire 2017-02-28 (qui est où le lien symbolique current pointe et toujours des points).

Cela m'a dérouté, alors j'ai lu les spécifications pour ln . Il est possible de s'avérer comportement attendu:

SYNOPSIS

ln [-fs] [-L|-P] source_file target_file

ln [-fs] [-L|-P] source_file... target_dir

LA DESCRIPTION

...

Le ​​deuxième formulaire Synopsis doit être supposé lorsque l'opérande final nomme un répertoire existant.


Il semble alors qu'il n'y a pas de moyen que ce soit à Repoint A Symlink Cela pointe actuellement vers un répertoire à une nouvelle cible, Où la nouvelle cible a une Nom Différent Du nom du symbole symbolique. Donc ln -fs ne fonctionne pas comme je le pensais.

DOIT I rm current, ou y a-t-il une autre approche que j'ai négligée?

9
Wildcard

Dans GNU's ln, il y a ln -n, ce qui permettrait à la ré-pointe d'un lien symbolique:

$ mkdir dir1 dir2
$ ln -s dir1 sym
# dir1/
# dir2/
# sym -> dir1/

$ ln -nsf dir2 sym
# dir1/
# dir2/
# sym -> dir2/

BSD Coreolutils utilise le drapeau -h de la même façon -n serait utilisé, mais il est probable que le binaire peut soutenir -n juste pour la compatibilité avec GN .

16