
일부 심볼릭 링크의 이름을 바꾸기 위해 다음을 수정하려고 합니다.
find /home/user/public_html/qa/ -type l \
-lname '/home/user/public_html/dev/*' -printf \
'ln -nsf $(readlink %p|sed s/dev/qa/) $(echo %p|sed s/dev/qa/)\n'\
> script.sh
불행하게도 이 -lname
옵션은 HPUX에서는 작동하지 않습니다. 내가 사용할 수 있는 것과 동등한 것을 알고 있나요?
여러분에게 내 문제에 대한 아이디어를 제공하기 위해 특정 폴더 내의 모든 심볼릭 링크를 변경하고 싶습니다.
New Symbolic link --> /base/testusr/scripts
Old Symbolic link --> /base/produsr/scripts
이제 폴더 "A"에는 이런 방식으로 변경해야 하는 소프트 링크가 있는 100개 이상의 파일이 포함되어 있습니다.
답변1
POSIX 도구만 사용하여 기호 링크의 대상을 볼 수 있는 유일한 방법은 ls
. Linux 및 BSD readlink
명령은 불행하게도 표준이 아닙니다.
ls
파일 이름을 구문 분석해야 하기 때문에 사용하기 가 어렵습니다. 파일 이름에 개행 문자가 포함되어 있지 않고 심볼릭 링크의 대상에 하위 문자열이 포함되어 있지 않다고 가정하면 ->
명령은 ls -l "$link" | sed 's/.* -> //'
링크의 대상을 인쇄합니다.
find /home/user/public_html/qa/ -type l |
while IFS= read -r link; do
target=$(ls -l "$link" | sed 's/.* -> //')
case $target in
/home/user/public_html/dev/*)
link_to_change=$(echo "$link" | sed s/dev/qa/)
ln -nsf "$(echo "$target" | sed s/dev/qa/)" "$link_to_change";;
esac
done