여러 파일에 대한 심볼릭 링크를 작성하는 방법을 알고 싶으십니까? 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.0
libgstadaptivedemux-1.0.so.0.1404.0
libgstadaptivedemux-1.0.so.0.1806.0
libgst*
이와 같은 여러 인수의 경우 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