0

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

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

这导致例如,

instantclient/libclntsh.so.11.1

我现在如何lninstantclient目录中,ln -s libclntsh.so.11.1 libclntsh.so所有find命令都与exec

我应该在这里提到我不想cd进入instantclient. 这是针对 Alpine Linux 的。

4

1 回答 1

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'
于 2016-06-12T10:26:23.963 回答