Параметр -f
позволяет вам перезаписать целевой файл, то есть файл с именем, с которым вы создаете ссылку, с помощью новая ссылка. Он не проверяет наличие других ссылок в том же каталоге.
Пример:
$ touch file1
$ touch file2
$ ln -s file1 link1
$ ls -l
total 8
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file1
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file2
lrwxr-xr-x 1 jenny staff 5 Mar 16 21:13 link1 -> file1
$ ln -s file2 link1
ln: link1: File exists
$ ln -s -f file2 link1
$ ls -l
total 8
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file1
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file2
lrwxr-xr-x 1 jenny staff 5 Mar 16 21:14 link1 -> file2
Если вы просто хотите переместить имя ссылки, чтобы вместо вызова link1
ее нужно было вызвать новая ссылка
, просто переместите ее:
$ mv link1 newlink
$ ls -l
total 8
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file1
-rw-r--r-- 1 jenny staff 0 Mar 16 21:13 file2
lrwxr-xr-x 1 jenny staff 5 Mar 16 21:14 newlink -> file2
Если вы работаете с каталогами, а не с файлами, вам необходимо добавить параметр -n
, а также -f
]:
$ ls -l
total 16
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir1
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir2
$ ln -s dir1 link1
$ ls -l
total 20
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir1
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir2
lrwxrwxrwx 1 jenny jenny 4 Mar 18 10:37 link1 -> dir1
$ ln -s -n -f dir2 link1
$ ls -l
total 20
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir1
drwxrwxr-x 2 jenny jenny 4096 Mar 18 10:37 dir2
lrwxrwxrwx 1 jenny jenny 4 Mar 18 10:38 link1 -> dir2
mv
является атомарным и будет делать то, что вы хотите, поскольку насколько я могу судить:
mv link new_link