Модификация символической ссылки для HP unix

1160
kalpesh

Я пытаюсь изменить следующее, чтобы переименовать некоторые символические ссылки:

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 различных файлов, имеющих программные ссылки, которые мне нужно изменить таким образом.

2
Адресация вопроса конкретному пользователю не работает. Dennis Williamson 13 лет назад 0
спасибо за редактирование Денниса, так как сценарий, на который я ссылался, был от Дэвида, поэтому упомянул его имя. kalpesh 13 лет назад 0
Привет все, моя проблема была решена с помощью следующего решения "find. -type l -exec ll -a {} + | awk ''> script) kalpesh 13 лет назад 0

1 ответ на вопрос

1
Gilles

Только с инструментами 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 

Похожие вопросы