バージョン番号を削除してシンボリックリンクを作成する

バージョン番号を削除してシンボリックリンクを作成する

次の共有ライブラリがたくさんあります。

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' _ {} +

シェルコマンドは引数(ファイル名)を繰り返し、ファイル名ごとに拡張子を削除してリンク先を取得します(ターゲットに拡張子がないまで削除された後に削除されます).soecho実際にリンクを構築するには削除してください。

おすすめ記事