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?
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 .