根据 ln 手册页:
man ln
-f, --force
remove existing destination files
据我所知,如果我想重新创建到某个目标目录/文件的新链接
我可以简单地做
ln -s -f some_directory new_link
但这不是我从 Linux/Solaris 机器上得到的结果
例如
[u@h w]# mkdir dir1
[u@h w]# ln -s dir1 link
[u@h w]# ls -l
drwxr-xr-x 2 root root 4096 Mar 16 20:26 dir1
lrwxrwxrwx 1 root root 4 Mar 16 20:27 link -> dir1
[u@h w]# ln -s -f dir1 new_link
现在我接受了这一事实,看到 new_link 现在指向 dir1,而“link”不存在,但 link 仍然指向 dir1?
如何在一个命令中重新创建新链接并同时删除旧链接?
(我不想使用 rm 命令)
[u@h w]# ls -l
drwxr-xr-x 2 root root 4096 Mar 16 20:26 dir1
lrwxrwxrwx 1 root root 4 Mar 16 20:27 link -> dir1
lrwxrwxrwx 1 root root 4 Mar 16 20:28 new_link -> dir1
其他不同的例子
#
# mkdir dir
#
# ln -s dir link
#
# mv dir dir_new
# ls -l
total 32
drwxr-xr-x 2 root root 117 Mar 16 21:44 dir_new
lrwxrwxrwx 1 root root 3 Mar 16 21:44 link -> dir
# ln -s -f dir_new link
ln: cannot create link: File exists
是否可以更新当前链接以指向新目录/文件
(无需获取文件是否存在?),
或者强制在不同的目录上再次创建链接?
答案1
该-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
它不应该被称为 而应该被称为newlink
,只需移动它即可:
$ 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
答案2
mv
是原子的,并且会做你想做的事,据我所知:
mv link new_link