2011-03-09 3 views

답변

60
ln -sfn /other/dir new_dir 

이 맞습니다. -n은 대상 심볼릭 링크를 역 참조하지 않습니다.

+1

좋은 지적. 맨 페이지에서 :'-h target_file 또는 target_dir이 심볼릭 링크 인 경우, 그것을 따르지 마십시오. 이것은 -f 옵션과 함께 디렉토리를 가리킬 수있는 심볼릭 링크를 대체하는 데 가장 유용합니다.' – redent84

+1

'-n'은'-h'와 같습니다 (적어도 MacOS X에서는) – redent84

9

당신은 그것을 만든 다음 그것을 이동할 수 있습니다

sudo ln -f -s /other/dir __new_dir 
sudo mv -Tf __new_dir new_dir 

편집 : -tf 누락, 일반 파일로 디렉토리를 치료하고 덮어 쓰기를 묻는 메시지가 표시되지 않습니다.

이렇게하면 덮어 쓰게됩니다.

1

mikeytown2s 주석에서 링크가 파손되기 때문에 redent84s answer 더 나은 이유, 내가 설명 할 것입니다 :

ln -sfn newDir currentDir 

이 일을

동안 당신이 볼 수있는대로, 원자 조작 아니라, 을 strace 포함 :

$ strace ln -snf newDir currentDir 2>&1 | grep link 
unlink("currentDir")   = 0 
symlink("newDir", "currentDir") = 0 

해당 심볼릭 링크를 가리키는 웹 서버 루트가있을 때 중요합니다. 심볼릭 링크가 삭제되고 다시 생성되는 동안 오류가 발생할 수 있습니다 (심지어 마이크로 초의 시간 경과).

방지하려면 오류 대신 사용

$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir 

이 임시 링크를 만들고 해당 후 원자 조작에 currentDir 을 덮어 쓰게됩니다.

관련 문제