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 和 BSDreadlink命令不是標準的。

使用ls很脆弱,因為您必須解析檔案名稱。假設您的檔案名稱不包含換行符號且符號連結的目標不包含 substring ->,則該命令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

相關內容