所以我有一个如下所示的find命令,它在目录libclntsh.so.*
中找到instantclient
个文件。
find instantclient -type f -name "*libclntsh\.so\.[0-9]*\.[0-9]*"
这导致例如,
instantclient/libclntsh.so.11.1
我现在如何在ln
目录instantclient
内ln -s libclntsh.so.11.1 libclntsh.so
使用find
命令并结合exec
我在这里要提到的是,我不想cd
进入instantclient
。
这适用于Alpine Linux。
答案 0 :(得分:1)
使用-execdir
选项。根据手册:
-execdir command {} ;
与
-exec
类似,但指定的命令是从包含匹配文件的子目录运行的,该文件通常不是您开始查找的目录。这是一种更安全的调用命令的方法,因为它可以在解析匹配文件的路径时避免竞争条件。
所以你的命令将是:
find instantclient -type f -name "*libclntsh\.so\.[0-9]*\.[0-9]*" -execdir ln -s {} libclntsh.so \;
修改强>
另一种解决方案
find instantclient -type f -name "*libclntsh\.so\.[0-9]*\.[0-9]*" | xargs -I {} sh -c 'ln -s $(basename {}) instantclient/libclntsh.so'