Скрипт для изменения симлинков (Нужен хелп)

Модератор: Модераторы разделов

Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Скрипт для изменения симлинков

Сообщение Александр »

Напишите плиз кто-нибудь такой скрипт: сканирует текущую папку и рекурсивно все подпапки на наличие симлинков, и если адрес ссылки содержит текст hda8, то из адреса удаляется все до этого текста и hda8 тоже. Пример. Был адрес ../../mnt/hda8/lib/fix.so, должен стать /lib/fix.so. Очень нужно для восстановления работоспособности системы!
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Скрипт для изменения симлинков

Сообщение serzh-z »

Так например:

Код: Выделить всё

#!/bin/bash

find -type l | while read name
do
    link=`readlink $name`
    if [ `echo $link | grep '^\.\./\.\./mnt/hda8'` ]; then
        link=`echo $link | sed 's/\.\.\/\.\.\/mnt\/hda8//'`
        ln -fsv $link $name
    fi
done
Ищет в текущем каталоге все ссылки, которые указывают на старый диск и правит их.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Скрипт для изменения симлинков

Сообщение allez »

Можно еще и так попробовать:

Код: Выделить всё

find . -type l | while read i; do ln -svf "`ls -l $i | awk '{print $NF}' | awk -F 'hda8' '{print $NF}'`" $i; done
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: Скрипт для изменения симлинков

Сообщение Александр »

Спасибо всем огромное! Почти восстановил систему до первоначального состояния. Только возник еще один маленький вопрос: как модифицировать любой из этих скриптов, чтобы он наоборот, к симлинке, адрес которой содержит какое-нибудь слово (пусть будет тот же hda8), в самое начало адреса вписывает /usr/share/doc?
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Скрипт для изменения симлинков

Сообщение allez »

В скрипте, который написал serzh-z, можно сделать так:

Код: Выделить всё

 link=`echo $link | sed 's/\.\.\/\.\.\/mnt\/hda8/\/usr\/share\/doc/'`


В моей команде - так:

Код: Выделить всё

find . -type l | while read i; do ln -svf "`ls -l $i | awk '{print $NF}' | awk -F 'hda8' '{print $NF}' | sed 's/\.\.\/\.\.\/mnt\/hda8/\/usr\/share\/doc/'`" $i; done
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: Скрипт для изменения симлинков

Сообщение Александр »

Спасибо, помогло :)
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали: