2016-06-12 2 views
0

그래서 instantclient 디렉토리에 libclntsh.so.* 개의 파일을 찾는 find 명령이 있습니다.상위 경로없이 찾기 및 소프트 링크

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

이것은 내가 지금 lninstantclient 디렉토리에, ln -s libclntsh.so.11.1 libclntsh.soexec

와 조합 find 명령을 모두 내가 않는 여기에 언급해야합니까

instantclient/libclntsh.so.11.1 

예에 대한 결과 cdinstantclient에 입력하고 싶지 않습니다. 그리고 이것은 Alpine Linux 용입니다.

답변

1

-execdir 옵션을 사용하십시오. 매뉴얼에 따라 :

-exec처럼

-execdir command {} ;

하지만, 지정된 명령은 일반적으로 당신이 찾아 시작하는 디렉토리가 아닌 일치하는 파일을 포함하는 하위 디렉토리에서 실행됩니다. 이는 명령을 호출하는 훨씬 더 안전한 방법입니다. 일치하는 파일에 대한 경로를 확인하는 동안 경쟁 조건을 피할 수 있습니다.

그래서 명령은 다음과 같습니다

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' 
+0

와우. 감사. 그 존재를 알지 못했습니다. – nixgadgets

+0

나도 마찬가지입니다 :) 단지'-exec'가 정확히 작동 하는지를 확인하고 있었고 man 페이지에서 그것을 발견했습니다. – Marki555

+0

다른 대안이 있습니까? '-execdir'는 Alpine Linux의 find에서 옵션으로 존재하지 않습니다. 아마도 그 이유는 아마도 알지 못합니다. – nixgadgets