링크를 유효하게 유지하면서 심볼릭 링크를 복사하는 방법은 무엇입니까?

링크를 유효하게 유지하면서 심볼릭 링크를 복사하는 방법은 무엇입니까?

디렉토리 아래에 동일한 디렉토리에 있는 일반 파일을 가리키는 /usr/local/boost_1_52_0/stage/lib심볼릭 링크가 있다고 가정해 보겠습니다.libboost_timer.solibboost_timer.so.1.52.0

동일한 파일을 가리키면서 cp디렉토리를 심볼릭 링크하는 방법./usr/local/lib/usr/local/boost_1_52_0/stage/lib/libboost_timer.so.1.52.0

여러 가지 옵션을 검색하고 시도했습니다. 첫 번째는 링크 이름을 사용하여 일반 파일을 대상 디렉터리에 복사합니다. 두 번째는 링크 자체를 복사하지만 새 디렉토리에서는 해당 링크가 유효하지 않습니다. 세 번째는 새 링크가 원래 링크를 가리키도록 만들어 일반 파일을 얻기 위해 두 번 역참조합니다. 그리고 링크 파일명을 사용하고 싶기 때문에 일반 파일에 대한 링크를 직접 만들 수는 없습니다.

어떻게 해야 하나요?

답변1

가장 좋은 방법은 두 번 역참조하는 것이지만 질문에서 언급했다는 사실은 사용 사례에 아무런 도움이 되지 않는다는 것을 의미한다고 생각합니다(왜?).

표준 셸 bash에서 두 번째로 좋은 옵션은 다음을 사용하는 것입니다 readlink -f(파일 이름에 줄 바꿈 문자가 포함된 경우 이 옵션이 중단될 가능성이 높지만 가능함).

#!/bin/bash
src="$1"
dest="$2"


fileLinkedTo=$(readlink -f "$src")
if [[ -d "$dest" ]]; then
    ln -s "$fileLinkedTo" "${dest%/}/${src##*/}"
else
    ln -s "$fileLinkedTo" "$dest"
fi

그런 다음 실행하십시오.

./script /usr/local/boost_1_52_0/stage/lib/libboost_timer.so /usr/local/lib

관련 정보