Symbolische Linkänderung für HP Unix

Symbolische Linkänderung für HP Unix

Ich versuche, Folgendes zu ändern, um einige symbolische Links umzubenennen:

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

Leider -lnamefunktioniert die Option nicht für HPUX. Kennt ihr etwas gleichwertiges, das ich verwenden kann?

Um Ihnen eine Vorstellung von meinem Problem zu geben: Ich möchte alle symbolischen Links in einem bestimmten Ordner ändern.

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

Jetzt enthält Ordner „A“ mehr als 100 verschiedene Dateien mit Softlinks, die ich auf diese Weise ändern muss.

Antwort1

Mit ausschließlich POSIX-Tools kann das Ziel eines symbolischen Links nur über angezeigt werden ls. Der Linux- und BSD- readlinkBefehl ist leider kein Standard.

Die Verwendung von lsist problematisch, da Sie die Dateinamen analysieren müssen. Vorausgesetzt, Ihre Dateinamen enthalten keine Zeilenumbrüche und die Ziele der symbolischen Links enthalten nicht die Teilzeichenfolge ->, gibt der Befehl ls -l "$link" | sed 's/.* -> //'das Ziel des Links aus.

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

verwandte Informationen