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很脆弱,因为您必须解析文件名。假设您的文件名不包含换行符,并且符号链接的目标不包含子字符串->,则该命令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

相关内容