Der richtige Weg, dies zu tun, ist, die --no-dereference
Option so zu verwenden.
$ ln -snf foo2 bar
Dies führt ln
dazu, dass der vorhandene Symlink als Datei behandelt wird. Andernfalls dereferenziert es bar
zu foo1
, steigt in foo1
und verwendet den ursprünglichen TARGET
Namen wie die, LINK_NAME
und das ist, warum Sie mit einem Symlink am Ende zu im foo2
Inneren des erstellt werden foo1
Verzeichnis. Die Manpage on ln
sagt folgendes aus ...
-n, - keine-Dereferenzierung Behandle LINK_NAME wie eine normale Datei, wenn es sich um einen symbolischen Link zu einem Verzeichnis
Unten ist die Shell-Ausgabe auf meinem Arch Linux-Desktop mit Version 8.21 ln
mit und ohne der --no-dereference
Option. Ich habe die gleichen Ergebnisse erhalten, die Sie ohne die --no-dereference
Option gemacht haben, aber mit der --no-dereference
Option funktionierte sie wie erwartet.
$ mkdir foo1 foo2 $ ln -s foo1 bar $ ls -l bar lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1 $ ln -sf foo2 bar $ ls -l bar lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1 $ ls -l foo1 total 0 lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2 $ ln -snf foo2 bar $ ls -l bar lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2