심볼릭 링크 생성을 강제하는 방법은 무엇입니까?

심볼릭 링크 생성을 강제하는 방법은 무엇입니까?

날짜별로 구성(이름 지정)된 다른 디렉터리가 포함된 특정 디렉터리가 있습니다. 쉽게 참조할 수 있도록 current최신 심볼릭 링크를 가리키는 링크를 지정했습니다 .

새 날짜 디렉토리를 생성하는 스크립트에서 current생성 이후 최신 디렉토리를 가리키도록 심볼릭 링크를 생성하거나 수정하고 싶습니다.

예를 들어 적절한 명령은 다음과 같습니다.

ln -fs 2017-03-01 current

current이 방법은 기호 링크가 아직 존재하지 않는 경우에 작동합니다.


그러나 current심볼릭 링크가 이미 생성된 경우(그리고 디렉토리를 가리키는 경우 2017-02-28)작동하지 않습니다:

결과적으로 심볼릭 링크를 삭제하고 다음을 가리키는 새 심볼릭 링크를 current생성하는 대신 깨진 심볼릭 링크가 됩니다.current2017-03-01~라고 불리는 2017-03-01방향그 자체,나머지~에디렉토리 2017-02-28(이것은 심볼릭 링크 current가 가리키는 곳이며 여전히 가리키는 곳입니다).

이게 날 너무 혼란스럽게 해스펙을 읽어보니ln. 이는 예상된 동작임이 밝혀졌습니다.

요약

ln [-fs] [-L|-P] source_file target_file

ln [-fs] [-L|-P] source_file... target_dir

설명하다

...

두 번째 요약 형식은 최종 피연산자가 기존 디렉터리의 이름을 지정할 때 사용해야 합니다.


그렇다면 방법이 없을 것 같군요심볼릭 링크 재지정현재 디렉토리를 가리키고 있습니다.새로운 목표를 향해,새 대상에 이름이 있는 경우다른심볼릭 링크의 이름입니다. 그래서 ln -fs생각했던 대로 되지 않네요.

~ 해야 하다rm current, 아니면 내가 간과하고 있는 또 다른 방법이 있습니까?

답변1

GNU에는 기호 링크를 다시 지정할 수 있는 가 ln있습니다 .ln -n

$ mkdir dir1 dir2
$ ln -s dir1 sym
# dir1/
# dir2/
# sym -> dir1/

$ ln -nsf dir2 sym
# dir1/
# dir2/
# sym -> dir2/

BSD coreutils는 다음과 같은 방식 -h으로 이 플래그를 사용합니다.-n그러나 바이너리는 -nGNU와의 호환성을 위해서만 지원 될 수 있습니다..

이 플래그는 동일한 위치로 리디렉션하는 데도 필요합니다 -f.

관련 정보