라이브러리(여러 파일)에 대한 심볼릭 링크를 업데이트하는 스크립트를 작성하는 방법

라이브러리(여러 파일)에 대한 심볼릭 링크를 업데이트하는 스크립트를 작성하는 방법

여러 파일에 대한 심볼릭 링크를 작성하는 방법을 알고 싶으십니까? Bash 스크립트를 작성하는 것과 같습니다.

기본적으로 파일은 gstreamer 라이브러리이고 라이브러리는 그러한 패턴입니다. 예는 다음과 같습니다

libgstadaptivedemux-1.0.so      should link to  libgstadaptivedemux-1.0.so.0                                                                                                                    
libgstadaptivedemux-1.0.so.0    should link to  libgstadaptivedemux-1.0.so.0.1806.0                                                                                                                  
libgstadaptivedemux-1.0.so.0.1404.0  (the old library)                                                                                                            
libgstadaptivedemux-1.0.so.0.1806.0   (the new library)

나는 다음과 같은 것을 시도합니다

ln -sf libgst*.0 libgst*
ln -sf libgst*.0.1806.0  libgst*.0

그러나 libgst***.0.1806.0이 디렉토리가 아니라고 항상 실패합니다. 내가 어디서 잘못됐나요?

감사해요

답변1

ln -sf libgst*.0 libgst*

(귀하의 경우)로 확장됩니다.

ln -sf libgstadaptivedemux-1.0.so.0 libgstadaptivedemux-1.0.so.0.1404.0 libgstadaptivedemux-1.0.so.0.1806.0 libgstadaptivedemux-1.0.so libgstadaptivedemux-1.0.so.0 libgstadaptivedemux-1.0.so.0.1404.0 libgstadaptivedemux-1.0.so.0.1806.0

, 및 는 4개 파일 모두와 일치하기 libgst*.0때문 입니다 .libgstadaptivedemux-1.0.so.0libgstadaptivedemux-1.0.so.0.1404.0libgstadaptivedemux-1.0.so.0.1806.0libgst*

이와 같은 여러 인수의 경우 ln마지막 인수는 디렉터리일 것으로 예상됩니다. 이 변형의 목적은 ln다음과 같습니다.N매개변수는 어디에 있나요?N> 2는 모든 이름 파일에 대한 링크를 생성하는 것입니다(비옵션 매개변수 1에서N-1) 주어진 디렉토리(매개변수)N).

당신이 항상 가정하자바꾸다기존 링크, 새 링크는 생성되지 않으며 첫 번째 명령은 다음으로 대체될 수 있습니다.

ln -sf libgst*.so.0 libgst*.so

(단, 이 두 개의 링크가 존재하는 경우에는 이 명령이 필요하지 않습니다.)

두 번째 명령은 다음으로 대체되어야 합니다.

ldconfig

그러면 링크와 라이브러리 캐시(동적 링커가 실제로 사용하는 것)가 올바르게 업데이트됩니다.

답변2

확장 기능이 무엇인지 이해하십시오. ith the라는 단어를 일치하는 모든 기존 파일 이름으로 대체 *합니다.*ln -sf libgst*.0 libgst*

ln -sf libgstadaptivedemux-1.0.so.0.1404.0 libgstadaptivedemux-1.0.so.0.1806.0 libgstadaptivedemux-1.0.so.0.1404.0 libgstadaptivedemux-1.0.so.0.1806.0
       ´----------------------------------v----------------------------------´ `----------------------------------v----------------------------------´
                                  matching libgst*.0                                                      matching libgst*

귀하의 경우 두 glob은 모두 동일한 두 파일로 확장됩니다(또는 이미 존재하는 일치하는 심볼릭 링크로 확장). 따라서 명령에 파일 이름을 추가해야 합니다 ln. 이 경우 ln성은 모든 기호 링크가 배치되어야 하는 디렉토리일 것으로 예상됩니다. 이것이 바로 이 오류 메시지가 나타나는 이유입니다.

ln -s file symlink하지만 뭔가 다른 것이 필요합니다. 즉, 한 번에 하나의 링크를 생성하는 클래식 형식입니다 . 별도로 작성하고 싶지 않은 경우 다음과 같은 논리가 있으면 반복해야 합니다.

for file in libgst*1806.0; do ln -sf "$file" "${file%.1806.0}; done

관련 정보