Найти и мягкую ссылку без родительского пути

Итак, у меня есть команда поиска, как показано ниже, которая находит 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.

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'
Другие вопросы по тегам