Modificación de enlace simbólico para HP Unix

Modificación de enlace simbólico para HP Unix

Estoy intentando modificar lo siguiente para cambiar el nombre de algunos enlaces 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

Lamentablemente la -lnameopción no funciona para HPUX. ¿Conoces algo equivalente que pueda usar?

Sólo para darle una idea de mi problema, quiero cambiar todos los enlaces simbólicos dentro de una carpeta en particular.

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

Ahora la carpeta "A" contiene más de 100 archivos diferentes que tienen enlaces suaves que necesito cambiar de esta manera.

Respuesta1

Sólo con herramientas POSIX, la única forma de ver el destino de un enlace simbólico es a través de ls. Lamentablemente, el comando de Linux y BSD readlinkno es estándar.

El uso lses frágil porque hay que analizar los nombres de los archivos. Suponiendo que los nombres de sus archivos no contienen nuevas líneas y que los destinos de los enlaces simbólicos no contienen la subcadena ->, el comando ls -l "$link" | sed 's/.* -> //'imprime el destino del enlace.

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

información relacionada