Linux

在一個命令上重新創建新連結並刪除舊連結

  • March 18, 2013

根據 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 而“連結”不存在但連結仍然指向 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

是否可以更新目前連結以指向新目錄/文件

(沒有得到文件存在?),

還是強制在不同的目錄上再次創建連結?

-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

引用自:https://serverfault.com/questions/488494