我創建了一個符號鏈接:無法覆蓋符號鏈接RedHat Linux上
sudo ln -s /some/dir new_dir
現在我要覆蓋符號鏈接指向一個新的位置,它不會覆蓋。我曾嘗試:
sudo ln -f -s /other/dir new_dir
我總能sudo rm new_dir
,但我寧願有它相應的,如果可能的覆蓋。有任何想法嗎?
我創建了一個符號鏈接:無法覆蓋符號鏈接RedHat Linux上
sudo ln -s /some/dir new_dir
現在我要覆蓋符號鏈接指向一個新的位置,它不會覆蓋。我曾嘗試:
sudo ln -f -s /other/dir new_dir
我總能sudo rm new_dir
,但我寧願有它相應的,如果可能的覆蓋。有任何想法嗎?
ln -sfn /other/dir new_dir
適合我。 -n
不解引用目標符號鏈接。
您可以創建它,然後移動它:
sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir
編輯:缺少-Tf,治療目錄作爲一個常規文件,並且不提示進行覆蓋。
這樣你會覆蓋它。
由於從mikeytown2s評論鏈接被打破,我將解釋爲什麼redent84s answer更好:
雖然
ln -sfn newDir currentDir
做工作,它不是一個原子操作,你可以看到與strace:
$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir") = 0
symlink("newDir", "currentDir") = 0
這是很重要的,當你有一個web服務器的根指向該符號鏈接。它可能會導致錯誤,而符號鏈接被刪除並重新創建 - 即使在微秒的時間範圍內。
以避免錯誤使用,而不是:
$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir
這將創建一個臨時鏈接和後覆蓋currentDir在一個原子操作。
好點。從手冊頁:'-h如果target_file或target_dir是符號鏈接,請不要關注它。這對於使用-f選項非常有用,可以替換可能指向目錄的符號鏈接。「# – redent84 2011-03-09 21:37:46
'-n'等效於'-h'(至少在MacOS X上) – redent84 2011-03-09 21:39:10