이미 존재하는 디렉토리에 대한 심볼릭 링크

이미 존재하는 디렉토리에 대한 심볼릭 링크

대상이 이미 존재한다는 점을 고려하여 /home/user/app/public에 연결하는 적절한 방법이 있습니까 ?/home/user/public_html

만약 내가 그렇게 한다면 ln -s /home/user/app/public /home/user/public_html나는 결국 을 가지게 될 것이다 /home/user/public_html/public.

와 같은 작업을 반전시키는 것도 가능할 것 같지만 최종 결과로 ln -s /home/user/public_html /home/user/app/public피하는 방법은 잘 모르겠습니다 ./home/user/app/public/public_html

답변1

귀하의 문제를 올바른 방식으로 이해해 드리겠습니다.

귀하의 출처는 /home/user/public_html이며 거기에 파일이 있다고 가정합니다. 그리고 에서 바로 이 디렉토리에 대한 링크를 만들고 싶습니다 /home/user/app/public. 이런 식으로 다음과 같은 작업을 수행 ls /home/user/app/public하고 에 존재하는 파일을 볼 수 있습니다 /home/user/public_html.

이것이 맞다면 소스는 /home/user/public_html이고 타겟은 입니다 /home/user/app/public. 적절한 명령은 다음과 같습니다.

ln -s /home/user/public_html /home/user/app/public

/home/user/app/public명령을 입력하기 전에 올바른 디렉터리나 파일이 아닌지 확인하세요 .

답변2

귀하의 질문을 올바르게 이해했다면 이미 존재하는 대상을 처리하는 방법을 알고 싶어 하셨을 것입니다. 그렇다면 두 가지 시나리오가 가능합니다.

1) 기존 대상이 파일입니다. 이 경우 "-f"를 사용하여 심볼릭 링크를 강제로 생성할 수 있습니다.

2) 기존 대상은 디렉터리입니다. 이 경우 ln 명령의 현재 구현에 따라 다릅니다. 그것~할 수 있었다"-n" 인수를 사용하면 디렉터리에 대한 심볼릭 링크가 사용자가 말한 대로 복제하는 대신 적절하게 처리됩니다.

참조:https://unix.stackexchange.com/questions/207294/create-symlink-overwrite-if-one-exists

답변3

정답이 이미 선택되어 있으므로 이에 대해 자세히 논의하지는 않겠습니다. 하지만 ln그런 식으로는 작동하지 않습니다.

대체 솔루션 mountln. 이 경우 올바른 명령은 다음과 같습니다.

sudo mount --bind ~/app/public ~/public_html

그러나 이런 방식으로 수행할 때 주의할 점은 다음과 같습니다. 내 경험상 mount권한이 필요하므로 그렇게 해야 합니다 sudo. 이러한 이유로 .profile세션이 잠길 수 있으므로 넣을 수 없습니다 . 스크립트에 넣을 수도 있고 /etc/fstab. 나는 일반적으로 바운드 마운트를 추가하지 않지만 fstab항목은 다음과 같을 것이라고 생각합니다.

/home/user/app/public /home/user/public_html none defaults,bind 0 0

또는 매우 유사한 것. 또한 에서는 상대 경로를 사용할 수 없으므로 fstab여기에 표시된 것처럼 경로는 절대 경로여야 합니다.

답변4

@jotadepicas와 @Milkmannetje가 댓글에서 언급했듯이 이를 처리하는 몇 가지 방법이 있습니다.

소스가 이고 $source대상이 이라고 가정합니다 $target.

  1. 먼저 대상을 수동으로 제거하십시오. 이는 Linux 및 Mac에서 일관되게 작동합니다.

    rm "$target"
    ln -s "$source" "$target"
    
  2. Linux를 사용하는 경우 옵션을 사용할 수 있습니다 -T.

    ln -sT "$source" "$target"
    
  3. macOS를 사용하는 경우 이 옵션을 사용할 수 있습니다 -F.

    ln -sF "$source" "$target"
    

관련 정보