как разрешить все символические ссылки в каталоге?

Я пытаюсь создать пакет debian из исходного кода, который не является моим. Сценарий configure, предоставленный автором, создает много символических ссылок в исходном каталоге. Они являются символическими ссылками на все заголовки в подкаталоге src и include (так что в случае установки пакета разработки make-файл может легко скопировать каталог include). Я использую debhelper скрипты для создания пакета.

Я использую debhelper скрипты для создания пакета. Проблема заключается в использовании нового формата пакета debian (quilt 3.0 native), debuild отказывается добавлять изменения исходного каталога, состоящего из символических ссылок, в конечный файл diff. Я получаю такие ошибки:

dpkg-source: error: cannot represent change to foo.h:
dpkg-source: error:   new version is symlink to /ba/foo/foo.h
dpkg-source: error:   old version is nonexistent

Мне известно о хорошем решении: измените скрипт настройки, чтобы вообще не вставлять символьные ссылки в заголовки. В makefile следует добавить цель для установки пакета devel. Хотя скрипт configure имеет проблемы с авторскими правами. Я не могу коснуться источника вверх по течению.

Я ищу bash-скрипт, чтобы заменить все символические ссылки в каталоге реальными файлами, на которые они указывают. Например, если в каталоге d есть три файла a и b и c, которые они использовали символьные ссылки на ../../foo/bar/x, ../../foo/bar/z ../../foo/bar/y, запустив нужный скрипт (скажем, magic.sh) давая ./d в качестве первого аргумента, следует

cp ../../foo/bar/x ./d/a
cp ../../foo/bar/y ./d/b
cp ../../foo/bar/z ./d/c

Я не могу найти способ узнать, на какой файл указывает символическая ссылка.

4
задан 18 September 2012 в 21:52

1 ответ

Используйте readlink.

$ readlink /etc/alternatives/editor
/usr/bin/vim.basic

и оберните его в сценарий оболочки, проходя по символическим ссылкам в каталоге.

Вы можете найти символические ссылки, используя find:

$ find . -type l

Более полный пример:

#!/bin/bash

find . -maxdepth 1 -type l | while read LINE; do 
echo link: $LINE resolved: `readlink $LINE`
done

выводит

link: ./.remmina resolved: sparkleshare-homedir/remmina
link: ./project resolved: Documents/2011-2 Project/
link: ./.ssh resolved: sparkleshare-homedir/ssh
0
ответ дан 18 September 2012 в 21:52

Другие вопросы по тегам:

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