버전 번호를 제거하여 심볼릭 링크 생성

버전 번호를 제거하여 심볼릭 링크 생성

다음과 같은 공유 라이브러리가 많이 있습니다.

libexpat.so.1.6.7                        libqquicklayoutsplugin.so        libstdc++.so.6.0.24
libexportlib.so.1.0.0                    libqsvg.so                       libsystemd.so.0.19.0
libfontconfig.so.1.10.1                  libQt53DAnimation.so.5.11.3      libwidgetsplugin.so
libfreetype.so.6.16.0                    libQt53DCore.so.5.11.3           libwindowplugin.so
libgcc_s.so.1                            libQt53DExtras.so.5.11.3         libX11.so.6.3.0
libgcrypt.so.20.2.2                      libQt53DInput.so.5.11.3          libX11-xcb.so.1.0.0

모든 공유 라이브러리를 반복하고 버전 번호가 있는 경우 이를 제거하여 심볼릭 링크를 생성하려고 합니다. 예를 들어:

libgcrypt.so.20.2   -> libgcrypt.so.20.2.2
libgcrypt.so.20     -> libgcrypt.so.20.2.2
libgcrypt.so        -> libgcrypt.so.20.2.2

지금까지 다음을 사용하여 버전 번호가 있는 모든 공유 라이브러리를 찾으려고 했습니다.

find . -name '*.so.*'

awk하지만 사용 및 명령 방법을 모르겠습니다 ln -s.

find . -name '*.so.*' -exec #awk and ln -s commands goes here# \;

누구든지 나에게 힌트를 줄 수 있습니까?

답변1

ldconfig이것은 다른 것( ?) 에도 작동하는 것 같지만 :

find . -name '*.so.*' -exec sh -c '
for so; do
  target="${so%.*}"
  while [ "${target##*.}" != "$target" ]; do
    echo ln -s "$so" "$target"
    target="${target%.*}"
  done
done' _ {} +

쉘 명령은 인수(파일 이름)를 반복하고 각 파일 이름에 대해 확장자를 제거하여 링크 대상을 얻습니다(대상에 확장자가 없을 때까지 제거된 후 제거됨 .so). echo실제로 링크를 구축하려면 제거하세요 .

관련 정보