HP Unix용 심볼릭 링크 수정

HP Unix용 심볼릭 링크 수정

일부 심볼릭 링크의 이름을 바꾸기 위해 다음을 수정하려고 합니다.

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

관련 정보