Shell-Script
通過刪除版本號創建符號連結
我有大量這樣的共享庫:
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# \;
任何人都可以給我一個提示嗎?
這似乎真的是其他事情的工作(
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' _ {} +
shell 命令循環遍歷參數(文件名),並且對於每個文件名,剝離副檔名以獲得連結目標(直到目標沒有副檔名,在
.so
被剝離之後)。刪除echo
以實際建立連結。