没有父路径的查找和软链接

时间:2016-06-12 10:17:49

标签: find pipe exec ln

所以我有一个如下所示的find命令,它在目录libclntsh.so.*中找到instantclient个文件。

find instantclient -type f -name "*libclntsh\.so\.[0-9]*\.[0-9]*"

这导致例如,

instantclient/libclntsh.so.11.1

我现在如何在ln目录instantclientln -s libclntsh.so.11.1 libclntsh.so使用find命令并结合exec

我在这里要提到的是,我不想cd进入instantclient。 这适用于Alpine Linux。

1 个答案:

答案 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'