심볼릭 링크가 자체적으로 생성되는 것을 방지하는 방법은 무엇입니까?

심볼릭 링크가 자체적으로 생성되는 것을 방지하는 방법은 무엇입니까?

다음 명령을 실행하면 예상대로 작동하여 srcfrom 에 대한 심볼릭 링크가 생성됩니다 include/bb.

ln -sf ../src include/bb

src그러나 동일한 명령을 다시 호출하면 aka에 추가 기호 링크가 생성 됩니다 .include/bbsrc/src

이를 방지하려면 어떻게 해야 합니까?


편집하다:

분명히 ln이것은 두 번 호출될 때 발생하며 세미콜론은 결국 그것과 아무 관련이 없을 것입니다.

이를 발생시키는 일련의 명령은 다음과 같습니다.

mkdir test
cd test
mkdir src
touch src/main.cpp
mkdir include
ln -sf ../src include/bb
ln -sf ../src include/bb

답변1

ln -s ../src include/bb

include/bb../src참조(해당 위치를 기준으로)라는 이름의 링크를 생성하거나 include/bb/src참조 ../src(해당 위치를 기준으로) 파일을 생성합니다. 후자 include/bb는 존재하고 디렉토리(실제로 또는 디렉토리에 대한 링크)인 경우입니다.

따라서 명령을 한 번 실행하면 이제 include/bb디렉터리 인 , src대 디렉터리를 가리키는 링크가 생성됩니다. 따라서 다음에 명령을 실행할 때 이름이 지정된 새 링크가 디렉터리에 추가됩니다.includeinclude/bbsrc

와는 아무 관련이 없습니다 ;.

사용하려고 할 수도 있습니다.

ln -sTf ../src include/bb

대신 (by -T)는 ln기존 파일을 include/bb일반 파일로 처리하도록 지시하고(디렉토리를 참조하는 링크인 경우에도) (by -f) 파일을 강제로 교체합니다.

답변2

당신이 달릴 때

ln -s ../src include/bb
ln -s ../src include/bb

include/bb첫 번째 줄은 디렉터리에 대한 링크를 생성합니다 ../src(예상하는 대로).

두 번째 발견은 include/bb이미 존재합니다. 그것이 일반 파일이거나 일반 파일에 대한 심볼릭 링크라면 오류가 될 것입니다(당신이 -f그렇게 하지 않는 한). 대신 심볼릭 링크입니다.목차 ../src, 이전 단계에서 생성되었습니다. ln언제대상 피연산자가 디렉터리입니다.:

이것왜냐하면유틸리티는 다음에 의해 지정된 각 파일에 대해 새로운 기호 링크를 생성해야 합니다.source_file피연산자는 다음과 같은 기존 디렉터리에 있는 대상 경로입니다.target_dir.

그래서 이번에는 디렉토리인 ../srcinside 에 대한 링크를 생성하도록 요청하고 있습니다. include/bb/링크 이름은 기본적으로 기존 기본 이름을 기준으로 지정됩니다 src(이 예의 경우). 세 번째로 실행하면 ../src/src현재 존재하는 오류가 발생합니다.


include/bb링크를 사용할 때마다 미리 링크를 제거하면 이를 방지할 수 있습니다 rm include/bb. 세미콜론은 이것과 아무 관련이 없습니다.

관련 정보