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