Найти и мягкую ссылку без родительского пути
Итак, у меня есть команда поиска, как показано ниже, которая находит 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'