Modificação de link simbólico para HP unix

Modificação de link simbólico para HP unix

Estou tentando modificar o seguinte para renomear alguns links simbólicos:

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

Infelizmente, a -lnameopção não funciona para HPUX. Você conhece algo equivalente que eu possa usar?

Só para você ter uma ideia do meu problema, quero alterar todos os links simbólicos dentro de uma pasta específica.

New Symbolic link --> /base/testusr/scripts 
Old Symbolic link --> /base/produsr/scripts

Agora, a pasta "A" contém mais de 100 arquivos diferentes com links virtuais que preciso alterar dessa maneira.

Responder1

Somente com ferramentas POSIX, a única maneira de ver o destino de um link simbólico é através do ls. Infelizmente , o comando Linux e BSD readlinknão é padrão.

Usar lsé frágil porque você precisa analisar os nomes dos arquivos. Supondo que os nomes dos seus arquivos não contenham novas linhas e que os alvos dos links simbólicos não contenham a substring ->, o comando ls -l "$link" | sed 's/.* -> //'imprime o alvo do link.

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

informação relacionada