Модификация символической ссылки для 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

Теперь папка «А» содержит более 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

Связанный контент