次の共有ライブラリがたくさんあります。
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
実際にリンクを構築するには削除してください。