Скрипт для изменения симлинков (Нужен хелп)
Модератор: Модераторы разделов
-
Александр
- Сообщения: 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
KDE 3.5.7 kernel 2.6.25 X.org 7.4
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Скрипт для изменения симлинков
Так например:Ищет в текущем каталоге все ссылки, которые указывают на старый диск и правит их.
Код: Выделить всё
#!/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: Скрипт для изменения симлинков
Можно еще и так попробовать:
Код: Выделить всё
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
KDE 3.5.7 kernel 2.6.25 X.org 7.4
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Скрипт для изменения симлинков
В скрипте, который написал 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
KDE 3.5.7 kernel 2.6.25 X.org 7.4